blob: 6afb2d71bfa9a7278c415085c05b90afaecc2321 [file] [log] [blame]
/*
* Copyright (C) 2012 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_PLATFORM_PLATFORM_H_
#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_PLATFORM_H_
#ifdef WIN32
#include <windows.h>
#endif
#include <memory>
#include "base/memory/scoped_refptr.h"
#include "base/metrics/user_metrics_action.h"
#include "base/strings/string_piece.h"
#include "base/time/time.h"
#include "components/viz/common/quads/shared_bitmap.h"
#include "components/viz/common/surfaces/frame_sink_id.h"
#include "mojo/public/cpp/system/data_pipe.h"
#include "mojo/public/cpp/system/message_pipe.h"
#include "third_party/blink/public/common/feature_policy/feature_policy.h"
#include "third_party/blink/public/platform/blame_context.h"
#include "third_party/blink/public/platform/user_metrics_action.h"
#include "third_party/blink/public/platform/web_audio_device.h"
#include "third_party/blink/public/platform/web_common.h"
#include "third_party/blink/public/platform/web_data.h"
#include "third_party/blink/public/platform/web_data_consumer_handle.h"
#include "third_party/blink/public/platform/web_gamepad_listener.h"
#include "third_party/blink/public/platform/web_gesture_device.h"
#include "third_party/blink/public/platform/web_localized_string.h"
#include "third_party/blink/public/platform/web_platform_event_type.h"
#include "third_party/blink/public/platform/web_rtc_api_name.h"
#include "third_party/blink/public/platform/web_size.h"
#include "third_party/blink/public/platform/web_speech_synthesizer.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_url_error.h"
#include "third_party/blink/public/platform/web_url_loader.h"
#include "third_party/blink/public/platform/web_url_loader_factory.h"
namespace base {
class SingleThreadTaskRunner;
}
namespace device {
class Gamepads;
}
namespace gpu {
class GpuMemoryBufferManager;
}
namespace service_manager {
class Connector;
class InterfaceProvider;
}
namespace v8 {
class Context;
template <class T>
class Local;
}
namespace blink {
class InterfaceProvider;
class WebAudioBus;
class WebAudioLatencyHint;
class WebBlobRegistry;
class WebCanvasCaptureHandler;
class WebClipboard;
class WebCompositorSupport;
class WebCookieJar;
class WebCrypto;
class WebDatabaseObserver;
class WebPlatformEventListener;
class WebFallbackThemeEngine;
class WebFileSystem;
class WebFileUtilities;
class WebGestureCurve;
class WebGraphicsContext3DProvider;
class WebIDBFactory;
class WebImageCaptureFrameGrabber;
class WebMIDIAccessor;
class WebMIDIAccessorClient;
class WebMediaCapabilitiesClient;
class WebMediaPlayer;
class WebMediaRecorderHandler;
class WebMediaStream;
class WebMediaStreamCenter;
class WebMediaStreamCenterClient;
class WebMediaStreamTrack;
class WebNotificationManager;
class WebPluginListBuilder;
class WebPrescientNetworking;
class WebPublicSuffixList;
class WebPushProvider;
class WebRTCCertificateGenerator;
class WebRTCPeerConnectionHandler;
class WebRTCPeerConnectionHandlerClient;
class WebSandboxSupport;
class WebScrollbarBehavior;
class WebSecurityOrigin;
class WebServiceWorkerCacheStorage;
class WebSocketHandshakeThrottle;
class WebSpeechSynthesizer;
class WebSpeechSynthesizerClient;
class WebStorageNamespace;
class WebSyncProvider;
struct WebFloatPoint;
class WebThemeEngine;
class WebThread;
struct WebThreadCreationParams;
class WebTrialTokenValidator;
class WebURLLoaderMockFactory;
class WebURLResponse;
class WebURLResponse;
struct WebSize;
class BLINK_PLATFORM_EXPORT Platform {
public:
// HTML5 Database ------------------------------------------------------
#ifdef WIN32
typedef HANDLE FileHandle;
#else
typedef int FileHandle;
#endif
// Initialize platform and wtf. If you need to initialize the entire Blink,
// you should use blink::Initialize.
static void Initialize(Platform*);
static Platform* Current();
// Used to switch the current platform only for testing.
// You should not pass in a Platform object that is not fully instantiated.
static void SetCurrentPlatformForTesting(Platform*);
// May return null.
virtual WebCookieJar* CookieJar() { return nullptr; }
// Must return non-null.
virtual WebClipboard* Clipboard();
// Must return non-null.
virtual WebFileUtilities* GetFileUtilities() { return nullptr; }
// May return null if sandbox support is not necessary
virtual WebSandboxSupport* GetSandboxSupport() { return nullptr; }
// May return null on some platforms.
virtual WebThemeEngine* ThemeEngine() { return nullptr; }
virtual WebFallbackThemeEngine* FallbackThemeEngine() { return nullptr; }
// May return null.
virtual std::unique_ptr<WebSpeechSynthesizer> CreateSpeechSynthesizer(
WebSpeechSynthesizerClient*) {
return nullptr;
}
// Audio --------------------------------------------------------------
virtual double AudioHardwareSampleRate() { return 0; }
virtual size_t AudioHardwareBufferSize() { return 0; }
virtual unsigned AudioHardwareOutputChannels() { return 0; }
// Creates a device for audio I/O.
// Pass in (number_of_input_channels > 0) if live/local audio input is
// desired.
virtual std::unique_ptr<WebAudioDevice> CreateAudioDevice(
unsigned number_of_input_channels,
unsigned number_of_channels,
const WebAudioLatencyHint& latency_hint,
WebAudioDevice::RenderCallback*,
const WebString& device_id,
const WebSecurityOrigin&) {
return nullptr;
}
// MIDI ----------------------------------------------------------------
// Creates a platform dependent WebMIDIAccessor. MIDIAccessor under platform
// creates and owns it.
virtual std::unique_ptr<WebMIDIAccessor> CreateMIDIAccessor(
WebMIDIAccessorClient*);
// Blob ----------------------------------------------------------------
// Must return non-null.
virtual WebBlobRegistry* GetBlobRegistry() { return nullptr; }
// Database ------------------------------------------------------------
// Opens a database file.
virtual FileHandle DatabaseOpenFile(const WebString& vfs_file_name,
int desired_flags) {
return FileHandle();
}
// Deletes a database file and returns the error code.
virtual int DatabaseDeleteFile(const WebString& vfs_file_name,
bool sync_dir) {
return 0;
}
// Returns the attributes of the given database file.
virtual long DatabaseGetFileAttributes(const WebString& vfs_file_name) {
return 0;
}
// Returns the size of the given database file.
virtual long long DatabaseGetFileSize(const WebString& vfs_file_name) {
return 0;
}
// Returns the space available for the given origin.
virtual long long DatabaseGetSpaceAvailableForOrigin(
const WebSecurityOrigin& origin) {
return 0;
}
// Set the size of the given database file.
virtual bool DatabaseSetFileSize(const WebString& vfs_file_name,
long long size) {
return false;
}
// Return a filename-friendly identifier for an origin.
virtual WebString DatabaseCreateOriginIdentifier(
const WebSecurityOrigin& origin) {
return WebString();
}
// DOM Storage --------------------------------------------------
// Return a LocalStorage namespace
virtual std::unique_ptr<WebStorageNamespace> CreateLocalStorageNamespace();
// Return a SessionStorage namespace
virtual std::unique_ptr<WebStorageNamespace> CreateSessionStorageNamespace(
base::StringPiece namespace_id);
// FileSystem ----------------------------------------------------------
// Must return non-null.
virtual WebFileSystem* FileSystem() { return nullptr; }
// Return a filename-friendly identifier for an origin.
virtual WebString FileSystemCreateOriginIdentifier(
const WebSecurityOrigin& origin) {
return WebString();
}
// IDN conversion ------------------------------------------------------
virtual WebString ConvertIDNToUnicode(const WebString& host) { return host; }
// IndexedDB ----------------------------------------------------------
// Must return non-null.
virtual WebIDBFactory* IdbFactory() { return nullptr; }
// Cache Storage ----------------------------------------------------------
virtual std::unique_ptr<WebServiceWorkerCacheStorage> CreateCacheStorage(
service_manager::InterfaceProvider* mojo_provider);
// Gamepad -------------------------------------------------------------
virtual void SampleGamepads(device::Gamepads& into) {}
// History -------------------------------------------------------------
// Returns the hash for the given canonicalized URL for use in visited
// link coloring.
virtual unsigned long long VisitedLinkHash(const char* canonical_url,
size_t length) {
return 0;
}
// Returns whether the given link hash is in the user's history. The
// hash must have been generated by calling VisitedLinkHash().
virtual bool IsLinkVisited(unsigned long long link_hash) { return false; }
// Return the number of of processors of the current machine.
virtual size_t NumberOfProcessors() { return 0; }
static const size_t kNoDecodedImageByteLimit = static_cast<size_t>(-1);
// Returns the maximum amount of memory a decoded image should be allowed.
// See comments on ImageDecoder::max_decoded_bytes_.
virtual size_t MaxDecodedImageBytes() { return kNoDecodedImageByteLimit; }
// Returns true if this is a low-end device.
// This is the same as base::SysInfo::IsLowEndDevice.
virtual bool IsLowEndDevice() { return false; }
// Process -------------------------------------------------------------
// Returns a unique identifier for a process. This may not necessarily be
// the process's process ID.
virtual uint32_t GetUniqueIdForProcess() { return 0; }
// Returns a unique FrameSinkID for the current renderer process
virtual viz::FrameSinkId GenerateFrameSinkId() { return viz::FrameSinkId(); }
// Network -------------------------------------------------------------
// Returns the platform's default URLLoaderFactory. It is expected that the
// returned value is stored and to be used for all the CreateURLLoader
// requests for the same loading context.
// TODO(kinuko): See if we can deprecate this too.
virtual std::unique_ptr<WebURLLoaderFactory> CreateDefaultURLLoaderFactory() {
return nullptr;
}
// Returns a new WebURLLoaderFactory that wraps the given
// network::mojom::URLLoaderFactory.
virtual std::unique_ptr<WebURLLoaderFactory> WrapURLLoaderFactory(
mojo::ScopedMessagePipeHandle url_loader_factory_handle) {
return nullptr;
}
// Returns a WebDataConsumerHandle for a given mojo data pipe endpoint.
virtual std::unique_ptr<WebDataConsumerHandle> CreateDataConsumerHandle(
mojo::ScopedDataPipeConsumerHandle handle) {
return nullptr;
}
// May return null.
virtual WebPrescientNetworking* PrescientNetworking() { return nullptr; }
// Returns the User-Agent string.
virtual WebString UserAgent() { return WebString(); }
// A suggestion to cache this metadata in association with this URL.
virtual void CacheMetadata(const WebURL&,
base::Time response_time,
const char* data,
size_t data_size) {}
// A suggestion to cache this metadata in association with this URL which
// resource is in CacheStorage.
virtual void CacheMetadataInCacheStorage(
const WebURL&,
base::Time response_time,
const char* data,
size_t data_size,
const blink::WebSecurityOrigin& cache_storage_origin,
const WebString& cache_storage_cache_name) {}
// Plugins -------------------------------------------------------------
// If refresh is true, then cached information should not be used to
// satisfy this call. mainFrameOrigin is used by the browser process to
// filter plugins from the plugin list based on content settings.
virtual void GetPluginList(bool refresh,
const WebSecurityOrigin& main_frame_origin,
WebPluginListBuilder*) {}
// Public Suffix List --------------------------------------------------
// May return null on some platforms.
virtual WebPublicSuffixList* PublicSuffixList() { return nullptr; }
// Resources -----------------------------------------------------------
// Returns a localized string resource (with substitution parameters).
virtual WebString QueryLocalizedString(WebLocalizedString::Name) {
return WebString();
}
virtual WebString QueryLocalizedString(WebLocalizedString::Name,
const WebString& parameter) {
return WebString();
}
virtual WebString QueryLocalizedString(WebLocalizedString::Name,
const WebString& parameter1,
const WebString& parameter2) {
return WebString();
}
virtual bool IsRendererSideResourceSchedulerEnabled() const { return false; }
// Threads -------------------------------------------------------
// Creates an embedder-defined thread.
virtual std::unique_ptr<WebThread> CreateThread(
const WebThreadCreationParams&);
// Creates a WebAudio-specific thread with the elevated priority. Do NOT use
// for any other purpose.
virtual std::unique_ptr<WebThread> CreateWebAudioThread();
// Returns an interface to the current thread. This is owned by the
// embedder.
virtual WebThread* CurrentThread() { return nullptr; }
// Returns a blame context for attributing top-level work which does not
// belong to a particular frame scope.
virtual BlameContext* GetTopLevelBlameContext() { return nullptr; }
// Resources -----------------------------------------------------------
// Returns a blob of data corresponding to the named resource.
virtual WebData GetDataResource(const char* name) { return WebData(); }
// Decodes the in-memory audio file data and returns the linear PCM audio data
// in the |destination_bus|.
// Returns true on success.
virtual bool DecodeAudioFileData(WebAudioBus* destination_bus,
const char* audio_file_data,
size_t data_size) {
return false;
}
// Scrollbar ----------------------------------------------------------
// Must return non-null.
virtual WebScrollbarBehavior* ScrollbarBehavior() { return nullptr; }
// Process lifetime management -----------------------------------------
// Disable/Enable sudden termination on a process level. When possible, it
// is preferable to disable sudden termination on a per-frame level via
// WebFrameClient::SuddenTerminationDisablerChanged.
// This method should only be called on the main thread.
virtual void SuddenTerminationChanged(bool enabled) {}
// Increase/decrease the process refcount. The process won't shut itself
// down until this refcount reaches 0. The browser might still shut down the
// renderer through fast shutdown. See SuddenTerminationChanged to disable
// that.
// These methods should only be called on the main thread.
virtual void AddRefProcess() {}
virtual void ReleaseRefProcess() {}
// System --------------------------------------------------------------
// Returns a value such as "en-US".
virtual WebString DefaultLocale() { return WebString(); }
// Returns an interface to the main thread. Can be null if blink was
// initialized on a thread without a message loop.
WebThread* MainThread() const;
// Returns an interface to the compositor thread. This can be null if the
// renderer was created with threaded rendering desabled.
virtual WebThread* CompositorThread() const { return 0; }
// Returns an interface to the IO task runner.
virtual scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() const {
return nullptr;
}
// Returns an interface to run nested message loop. Used for debugging.
class NestedMessageLoopRunner {
public:
virtual ~NestedMessageLoopRunner() = default;
virtual void Run() = 0;
virtual void QuitNow() = 0;
};
virtual std::unique_ptr<NestedMessageLoopRunner>
CreateNestedMessageLoopRunner() const {
return nullptr;
}
// Testing -------------------------------------------------------------
// Gets a pointer to URLLoaderMockFactory for testing. Will not be available
// in production builds.
// TODO(kinuko,toyoshim): Deprecate this one. (crbug.com/751425)
virtual WebURLLoaderMockFactory* GetURLLoaderMockFactory() { return nullptr; }
// Record to a RAPPOR privacy-preserving metric, see:
// https://www.chromium.org/developers/design-documents/rappor.
// RecordRappor records a sample string, while RecordRapporURL records the
// eTLD+1 of a url.
virtual void RecordRappor(const char* metric, const WebString& sample) {}
virtual void RecordRapporURL(const char* metric, const blink::WebURL& url) {}
// Record a UMA sequence action. The UserMetricsAction construction must
// be on a single line for extract_actions.py to find it. Please see
// that script for more details. Intended use is:
// RecordAction(UserMetricsAction("MyAction"))
virtual void RecordAction(const UserMetricsAction&) {}
typedef uint64_t WebMemoryAllocatorDumpGuid;
// GPU ----------------------------------------------------------------
//
enum ContextType {
kWebGL1ContextType, // WebGL 1.0 context, use only for WebGL canvases
kWebGL2ContextType, // WebGL 2.0 context, use only for WebGL canvases
kGLES2ContextType, // GLES 2.0 context, default, good for using skia
kGLES3ContextType, // GLES 3.0 context
};
struct ContextAttributes {
bool fail_if_major_performance_caveat = false;
ContextType context_type = kGLES2ContextType;
// Offscreen contexts usually share a surface for the default frame buffer
// since they aren't rendering to it. Setting any of the following
// attributes causes creation of a custom surface owned by the context.
bool support_alpha = false;
bool support_depth = false;
bool support_antialias = false;
bool support_stencil = false;
// Offscreen contexts created for WebGL should not need the RasterInterface
// or GrContext. If either of these are set to false, it will not be
// possible to use the corresponding interface for the lifetime of the
// context.
bool enable_raster_interface = false;
bool support_grcontext = false;
};
struct GraphicsInfo {
unsigned vendor_id = 0;
unsigned device_id = 0;
unsigned reset_notification_strategy = 0;
bool sandboxed = false;
bool amd_switchable = false;
bool optimus = false;
WebString vendor_info;
WebString renderer_info;
WebString driver_version;
WebString error_message;
};
// Returns a newly allocated and initialized offscreen context provider,
// backed by an independent context. Returns null if the context cannot be
// created or initialized.
// Passing an existing provider to |share_context| will create the new context
// in the same share group as the one passed.
virtual std::unique_ptr<WebGraphicsContext3DProvider>
CreateOffscreenGraphicsContext3DProvider(
const ContextAttributes&,
const WebURL& top_document_url,
WebGraphicsContext3DProvider* share_context,
GraphicsInfo*);
// Returns a newly allocated and initialized offscreen context provider,
// backed by the process-wide shared main thread context. Returns null if
// the context cannot be created or initialized.
virtual std::unique_ptr<WebGraphicsContext3DProvider>
CreateSharedOffscreenGraphicsContext3DProvider();
virtual gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() {
return nullptr;
}
virtual std::unique_ptr<viz::SharedBitmap> AllocateSharedBitmap(
const WebSize& size,
viz::ResourceFormat format) {
return nullptr;
}
virtual bool IsThreadedCompositingEnabled() { return false; }
virtual bool IsThreadedAnimationEnabled() { return true; }
virtual WebCompositorSupport* CompositorSupport() { return nullptr; }
// Creates a new fling animation curve instance for device |device_source|
// with |velocity| and already scrolled |cumulative_scroll| pixels.
virtual std::unique_ptr<WebGestureCurve> CreateFlingAnimationCurve(
WebGestureDevice device_source,
const WebFloatPoint& velocity,
const WebSize& cumulative_scroll);
// Whether the compositor is using gpu and expects gpu resources as inputs,
// or software based resources.
// NOTE: This function should not be called from core/ and modules/, but
// called by platform/graphics/ is fine.
virtual bool IsGpuCompositingDisabled() { return true; }
// WebRTC ----------------------------------------------------------
// Creates a WebRTCPeerConnectionHandler for RTCPeerConnection.
// May return null if WebRTC functionality is not avaliable or if it's out of
// resources.
virtual std::unique_ptr<WebRTCPeerConnectionHandler>
CreateRTCPeerConnectionHandler(WebRTCPeerConnectionHandlerClient*,
scoped_refptr<base::SingleThreadTaskRunner>);
// Creates a WebMediaRecorderHandler to record MediaStreams.
// May return null if the functionality is not available or out of resources.
virtual std::unique_ptr<WebMediaRecorderHandler> CreateMediaRecorderHandler(
scoped_refptr<base::SingleThreadTaskRunner>);
// May return null if WebRTC functionality is not available or out of
// resources.
virtual std::unique_ptr<WebRTCCertificateGenerator>
CreateRTCCertificateGenerator();
// May return null if WebRTC functionality is not available or out of
// resources.
virtual std::unique_ptr<WebMediaStreamCenter> CreateMediaStreamCenter(
WebMediaStreamCenterClient*);
// Creates a WebCanvasCaptureHandler to capture Canvas output.
virtual std::unique_ptr<WebCanvasCaptureHandler>
CreateCanvasCaptureHandler(const WebSize&, double, WebMediaStreamTrack*);
// Fills in the WebMediaStream to capture from the WebMediaPlayer identified
// by the second parameter.
virtual void CreateHTMLVideoElementCapturer(
WebMediaStream*,
WebMediaPlayer*,
scoped_refptr<base::SingleThreadTaskRunner>) {}
virtual void CreateHTMLAudioElementCapturer(WebMediaStream*,
WebMediaPlayer*) {}
// Creates a WebImageCaptureFrameGrabber to take a snapshot of a Video Tracks.
// May return null if the functionality is not available.
virtual std::unique_ptr<WebImageCaptureFrameGrabber>
CreateImageCaptureFrameGrabber();
virtual void UpdateWebRTCAPICount(WebRTCAPIName api_name) {}
// WebSocket ----------------------------------------------------------
// If this method returns non-null the returned object will be used to
// determine if/when a new WebSocket connection can be exposed to Javascript.
// TODO(nhiroki): Remove this once the off-main-thread WebSocket is enabled by
// default (https://crbug.com/825740).
virtual std::unique_ptr<WebSocketHandshakeThrottle>
CreateWebSocketHandshakeThrottle();
// WebWorker ----------------------------------------------------------
virtual void DidStartWorkerThread() {}
virtual void WillStopWorkerThread() {}
virtual void WorkerContextCreated(const v8::Local<v8::Context>& worker) {}
virtual bool AllowScriptExtensionForServiceWorker(const WebURL& script_url) {
return false;
}
// WebCrypto ----------------------------------------------------------
virtual WebCrypto* Crypto() { return nullptr; }
// Mojo ---------------------------------------------------------------
virtual service_manager::Connector* GetConnector();
virtual InterfaceProvider* GetInterfaceProvider();
virtual const char* GetBrowserServiceName() const { return ""; }
// Platform events -----------------------------------------------------
// Device Orientation, Device Motion, Battery, Gamepad.
// Request the platform to start listening to the events of the specified
// type and notify the given listener (if not null) when there is an update.
virtual void StartListening(WebPlatformEventType type,
WebPlatformEventListener* listener) {}
// Request the platform to stop listening to the specified event and no
// longer notify the listener, if any.
virtual void StopListening(WebPlatformEventType type) {}
// This method converts from the supplied DOM code enum to the
// embedder's DOM code value for the key pressed. |dom_code| values are
// based on the value defined in
// ui/events/keycodes/dom4/keycode_converter_data.h.
// Returns null string, if DOM code value is not found.
virtual WebString DomCodeStringFromEnum(int dom_code) { return WebString(); }
// This method converts from the suppled DOM code value to the
// embedder's DOM code enum for the key pressed. |code_string| is defined in
// ui/events/keycodes/dom4/keycode_converter_data.h.
// Returns 0, if DOM code enum is not found.
virtual int DomEnumFromCodeString(const WebString& code_string) { return 0; }
// This method converts from the supplied DOM |key| enum to the
// corresponding DOM |key| string value for the key pressed. |dom_key| values
// are based on the value defined in ui/events/keycodes/dom3/dom_key_data.h.
// Returns empty string, if DOM key value is not found.
virtual WebString DomKeyStringFromEnum(int dom_key) { return WebString(); }
// This method converts from the suppled DOM |key| value to the
// embedder's DOM |key| enum for the key pressed. |key_string| is defined in
// ui/events/keycodes/dom3/dom_key_data.h.
// Returns 0 if DOM key enum is not found.
virtual int DomKeyEnumFromString(const WebString& key_string) { return 0; }
// This method returns whether the specified |dom_key| is a modifier key.
// |dom_key| values are based on the value defined in
// ui/events/keycodes/dom3/dom_key_data.h.
virtual bool IsDomKeyForModifier(int dom_key) { return false; }
// WebDatabase --------------------------------------------------------
virtual WebDatabaseObserver* DatabaseObserver() { return nullptr; }
// Web Notifications --------------------------------------------------
virtual WebNotificationManager* GetWebNotificationManager() {
return nullptr;
}
// Push API------------------------------------------------------------
virtual WebPushProvider* PushProvider() { return nullptr; }
// Background Sync API-------------------------------------------------
virtual WebSyncProvider* BackgroundSyncProvider() { return nullptr; }
// Origin Trials ------------------------------------------------------
// TODO(crbug.com/738505): Remove the Web layer and return a
// blink::TrialTokenValidator directly.
virtual std::unique_ptr<WebTrialTokenValidator> CreateTrialTokenValidator();
// Media Capabilities --------------------------------------------------
virtual WebMediaCapabilitiesClient* MediaCapabilitiesClient() {
return nullptr;
}
// Memory ------------------------------------------------------------
// Requests purging memory. The platform may or may not purge memory,
// depending on memory pressure.
virtual void RequestPurgeMemory() {}
// V8 Context Snapshot --------------------------------------------------
// This method returns true only when
// tools/v8_context_snapshot/v8_context_snapshot_generator is running (which
// runs during Chromium's build step).
virtual bool IsTakingV8ContextSnapshot() { return false; }
protected:
Platform();
virtual ~Platform();
WebThread* main_thread_;
};
} // namespace blink
#endif