chromium/third_party/blink/public/web/blink.h

/*
 * Copyright (C) 2009 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_BLINK_H_
#define THIRD_PARTY_BLINK_PUBLIC_WEB_BLINK_H_

#include "third_party/blink/public/platform/web_common.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_vector.h"
#include "v8/include/v8-isolate.h"

namespace mojo {
class BinderMap;
}

namespace blink {

namespace scheduler {
class WebThreadScheduler;
}  // namespace scheduler

class Platform;

// Initialize the entire Blink (wtf, platform, core, modules and web).
// If you just need wtf and platform, use Platform::Initialize instead.
//
// Must be called on the thread that will be the main thread before
// using any other public APIs. The provided Platform must be non-null and
// must remain valid until the current thread calls shutdown.
BLINK_EXPORT void Initialize(
    Platform*,
    mojo::BinderMap*,
    scheduler::WebThreadScheduler* main_thread_scheduler);

// The same as above, but this only supports simple single-threaded execution
// environment. The main thread WebThread object is owned by Platform when this
// version is used. This version is mainly for tests and other components
// requiring only the simple environment. This does not create the
// `v8::Isolate`, callers should call `CreateMainThreadIsolate` after calling
// this method.
//
// When this version is used, your Platform implementation needs to follow
// a certain convention on CurrentThread(); see the comments at
// Platform::CreateMainThreadAndInitialize().
BLINK_EXPORT void CreateMainThreadAndInitialize(Platform*, mojo::BinderMap*);

// Performs initialization required for Blink (wtf, core, modules and
// web), but without initializing the main thread isolate. This allows
// for CreateMainThreadIsolate() below to be called.
BLINK_EXPORT void InitializeWithoutIsolateForTesting(
    Platform*,
    mojo::BinderMap*,
    scheduler::WebThreadScheduler* main_thread_scheduler);

// Initializes and returns the Main Thread Isolate. InitializeCommon()
// must be called before this.
BLINK_EXPORT v8::Isolate* CreateMainThreadIsolate();

// Alters the rendering of content to conform to a fixed set of rules.
BLINK_EXPORT void SetWebTestMode(bool);
BLINK_EXPORT bool WebTestMode();

// Alters whether the browser can handle focus events while running web tests.
BLINK_EXPORT void SetBrowserCanHandleFocusForWebTest(bool);

// Alters the rendering of fonts for web tests.
BLINK_EXPORT void SetFontAntialiasingEnabledForTest(bool);
BLINK_EXPORT bool FontAntialiasingEnabledForTest();

// Purge the plugin list cache. This can cause a web-visible and out-of-spec
// change to |navigator.plugins| if the plugin list has changed (see
// https://crbug.com/735854). |reloadPages| is unsupported and must be false.
BLINK_EXPORT void ResetPluginCache(bool reload_pages = false);

// The embedder should call this periodically in an attempt to balance overall
// performance and memory usage.
BLINK_EXPORT void DecommitFreeableMemory();

// Send memory pressure notification to isolates.
BLINK_EXPORT void MemoryPressureNotificationToAllIsolates(
    v8::MemoryPressureLevel);

// Send a request to the all isolates to prioritize energy efficiency
// because the embedder is running in battery saver mode.
BLINK_EXPORT void SetBatterySaverModeForAllIsolates(
    bool battery_saver_mode_enabled);

// Logs stats. Intended to be called during shutdown.
BLINK_EXPORT void LogStatsDuringShutdown();

// Allows disabling domain relaxation.
BLINK_EXPORT void SetDomainRelaxationForbiddenForTest(bool forbidden,
                                                      const WebString& scheme);
// Undos all calls to SetDomainRelaxationForbiddenForTest().
BLINK_EXPORT void ResetDomainRelaxationForTest();

// Force the webgl context to fail so that webglcontextcreationerror
// event gets generated/tested.
BLINK_EXPORT void ForceNextWebGLContextCreationToFailForTest();

// Force the drawing buffer used by webgl contexts to fail so that the webgl
// context's ability to deal with that failure gracefully can be tested.
BLINK_EXPORT void ForceNextDrawingBufferCreationToFailForTest();

// Set whether this renderer process is "cross-origin isolated". This
// corresponds to agent cluster's "cross-origin isolated" concept.
// TODO(yhirano): Have the spec URL.
// This property is process global because we ensure that a renderer process
// host only cross-origin isolated agents or only non-cross-origin isolated
// agents, not both.
// This is called at most once. This is called earlier than any frame commit.
BLINK_EXPORT void SetIsCrossOriginIsolated(bool value);

// Allows disabling web security. One example of this is that it enables APIs
// that would otherwise require cross-origin-isolated contexts.
BLINK_EXPORT void SetIsWebSecurityDisabled(bool value);

// Set whether this renderer process is allowed to use Isolated Context APIs.
// Similarly to the `SetIsCrossOriginIsolated()` method above, this flag is
// process global, and called at most once, prior to committing a frame.
//
// TODO(mkwst): We need a specification for this restriction.
BLINK_EXPORT void SetIsIsolatedContext(bool value);
BLINK_EXPORT bool IsIsolatedContext();

// Set a list of CORS exempt headers. This list is used for fetching resources
// from frames.
BLINK_EXPORT void SetCorsExemptHeaderList(
    const WebVector<WebString>& web_cors_exempt_header_list);

// Notification the process hosting blink is in the foreground/background.
BLINK_EXPORT void OnProcessForegrounded();
BLINK_EXPORT void OnProcessBackgrounded();

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_PUBLIC_WEB_BLINK_H_