| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef WEBKIT_PLUGINS_PPAPI_PLUGIN_DELEGATE_H_ |
| #define WEBKIT_PLUGINS_PPAPI_PLUGIN_DELEGATE_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/callback.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/message_loop_proxy.h" |
| #include "base/platform_file.h" |
| #include "base/shared_memory.h" |
| #include "base/sync_socket.h" |
| #include "base/time.h" |
| #include "googleurl/src/gurl.h" |
| #include "media/video/capture/video_capture.h" |
| #include "media/video/video_decode_accelerator.h" |
| #include "ppapi/c/dev/pp_video_dev.h" |
| #include "ppapi/c/dev/ppb_device_ref_dev.h" |
| #include "ppapi/c/pp_completion_callback.h" |
| #include "ppapi/c/pp_errors.h" |
| #include "ppapi/c/pp_instance.h" |
| #include "ppapi/c/pp_resource.h" |
| #include "ppapi/c/pp_stdint.h" |
| #include "ppapi/c/private/ppb_flash.h" |
| #include "ppapi/c/private/ppb_udp_socket_private.h" |
| #include "ppapi/shared_impl/dir_contents.h" |
| #include "ui/gfx/size.h" |
| #include "webkit/fileapi/file_system_types.h" |
| #include "webkit/glue/clipboard_client.h" |
| #include "webkit/quota/quota_types.h" |
| |
| class GURL; |
| class SkBitmap; |
| class TransportDIB; |
| struct PP_HostResolver_Private_Hint; |
| struct PP_NetAddress_Private; |
| |
| namespace base { |
| class MessageLoopProxy; |
| class Time; |
| } |
| |
| namespace fileapi { |
| class FileSystemCallbackDispatcher; |
| } |
| |
| namespace gfx { |
| class Point; |
| } |
| |
| namespace gpu { |
| class CommandBuffer; |
| } |
| |
| namespace ppapi { |
| class PepperFilePath; |
| class PPB_HostResolver_Shared; |
| class PPB_X509Certificate_Fields; |
| struct DeviceRefData; |
| struct HostPortPair; |
| struct Preferences; |
| |
| namespace thunk { |
| class ResourceCreationAPI; |
| } |
| |
| } // namespace ppapi |
| |
| namespace skia { |
| class PlatformCanvas; |
| } |
| |
| namespace WebKit { |
| class WebGamepads; |
| class WebPlugin; |
| struct WebCompositionUnderline; |
| struct WebCursorInfo; |
| } |
| |
| namespace webkit_glue { |
| class ClipboardClient; |
| class P2PTransport; |
| class NetworkListObserver; |
| } // namespace webkit_glue |
| |
| namespace webkit { |
| namespace ppapi { |
| |
| class FileIO; |
| class FullscreenContainer; |
| class PluginInstance; |
| class PluginModule; |
| class PPB_Broker_Impl; |
| class PPB_Flash_Menu_Impl; |
| class PPB_TCPSocket_Private_Impl; |
| class PPB_UDPSocket_Private_Impl; |
| |
| // Virtual interface that the browser implements to implement features for |
| // PPAPI plugins. |
| class PluginDelegate { |
| public: |
| // This interface is used for the PluginModule to tell the code in charge of |
| // re-using modules which modules currently exist. |
| // |
| // It is different than the other interfaces, which are scoped to the |
| // lifetime of the plugin instance. The implementor of this interface must |
| // outlive all plugin modules, and is in practice a singleton |
| // (PepperPluginRegistry). This requirement means we can't do the obvious |
| // thing and just have a PluginDelegate call for this purpose (when the |
| // module is being deleted, we know there are no more PluginInstances that |
| // have PluginDelegates). |
| class ModuleLifetime { |
| public: |
| // Notification that the given plugin object is no longer usable. It either |
| // indicates the module was deleted, or that it has crashed. |
| // |
| // This can be called from the module's destructor, so you should not |
| // dereference the given pointer. |
| virtual void PluginModuleDead(PluginModule* dead_module) = 0; |
| }; |
| |
| // This class is implemented by the PluginDelegate implementation and is |
| // designed to manage the lifetime and communication with the proxy's |
| // HostDispatcher for out-of-process PPAPI plugins. |
| // |
| // The point of this is to avoid having a relationship from the PPAPI plugin |
| // implementation to the ppapi proxy code. Otherwise, things like the IPC |
| // system will be dependencies of the webkit directory, which we don't want. |
| // |
| // The PluginModule will scope the lifetime of this object to its own |
| // lifetime, so the implementation can use this to manage the HostDispatcher |
| // lifetime without introducing the dependency. |
| class OutOfProcessProxy { |
| public: |
| virtual ~OutOfProcessProxy() {} |
| |
| // Implements GetInterface for the proxied plugin. |
| virtual const void* GetProxiedInterface(const char* name) = 0; |
| |
| // Notification to the out-of-process layer that the given plugin instance |
| // has been created. This will happen before the normal PPB_Instance method |
| // calls so the out-of-process code can set up the tracking information for |
| // the new instance. |
| virtual void AddInstance(PP_Instance instance) = 0; |
| |
| // Like AddInstance but removes the given instance. This is called after |
| // regular instance shutdown so the out-of-process code can clean up its |
| // tracking information. |
| virtual void RemoveInstance(PP_Instance instance) = 0; |
| }; |
| |
| // Represents an image. This is to allow the browser layer to supply a correct |
| // image representation. In Chrome, this will be a TransportDIB. |
| class PlatformImage2D { |
| public: |
| virtual ~PlatformImage2D() {} |
| |
| // Caller will own the returned pointer, returns NULL on failure. |
| virtual skia::PlatformCanvas* Map() = 0; |
| |
| // Returns the platform-specific shared memory handle of the data backing |
| // this image. This is used by PPAPI proxying to send the image to the |
| // out-of-process plugin. On success, the size in bytes will be placed into |
| // |*bytes_count|. Returns 0 on failure. |
| virtual intptr_t GetSharedMemoryHandle(uint32* byte_count) const = 0; |
| |
| virtual TransportDIB* GetTransportDIB() const = 0; |
| }; |
| |
| class PlatformContext3D { |
| public: |
| virtual ~PlatformContext3D() {} |
| |
| // Initialize the context. |
| virtual bool Init(const int32* attrib_list, |
| PlatformContext3D* share_context) = 0; |
| |
| // If the plugin instance is backed by an OpenGL, return its ID in the |
| // compositors namespace. Otherwise return 0. Returns 0 by default. |
| virtual unsigned GetBackingTextureId() = 0; |
| |
| // Returns true if the backing texture is always opaque. |
| virtual bool IsOpaque() = 0; |
| |
| // This call will return the address of the command buffer for this context |
| // that is constructed in Initialize() and is valid until this context is |
| // destroyed. |
| virtual ::gpu::CommandBuffer* GetCommandBuffer() = 0; |
| |
| // If the command buffer is routed in the GPU channel, return the route id. |
| // Otherwise return 0. |
| virtual int GetCommandBufferRouteId() = 0; |
| |
| // Set an optional callback that will be invoked when the context is lost |
| // (e.g. gpu process crash). Takes ownership of the callback. |
| virtual void SetContextLostCallback( |
| const base::Callback<void()>& callback) = 0; |
| |
| // Set an optional callback that will be invoked when the GPU process |
| // sends a console message. |
| typedef base::Callback<void(const std::string&, int)> |
| ConsoleMessageCallback; |
| virtual void SetOnConsoleMessageCallback( |
| const ConsoleMessageCallback& callback) = 0; |
| |
| // Run the callback once the channel has been flushed. |
| virtual bool Echo(const base::Callback<void()>& callback) = 0; |
| }; |
| |
| // The base class of clients used by |PlatformAudioOutput| and |
| // |PlatformAudioInput|. |
| class PlatformAudioClientBase { |
| protected: |
| virtual ~PlatformAudioClientBase() {} |
| |
| public: |
| // Called when the stream is created. |
| virtual void StreamCreated(base::SharedMemoryHandle shared_memory_handle, |
| size_t shared_memory_size, |
| base::SyncSocket::Handle socket) = 0; |
| }; |
| |
| class PlatformAudioOutputClient : public PlatformAudioClientBase { |
| protected: |
| virtual ~PlatformAudioOutputClient() {} |
| }; |
| |
| class PlatformAudioOutput { |
| public: |
| // Starts the playback. Returns false on error or if called before the |
| // stream is created or after the stream is closed. |
| virtual bool StartPlayback() = 0; |
| |
| // Stops the playback. Returns false on error or if called before the stream |
| // is created or after the stream is closed. |
| virtual bool StopPlayback() = 0; |
| |
| // Closes the stream. Make sure to call this before the object is |
| // destructed. |
| virtual void ShutDown() = 0; |
| |
| protected: |
| virtual ~PlatformAudioOutput() {} |
| }; |
| |
| class PlatformAudioInputClient : public PlatformAudioClientBase { |
| public: |
| virtual void StreamCreationFailed() = 0; |
| |
| protected: |
| virtual ~PlatformAudioInputClient() {} |
| }; |
| |
| class PlatformAudioInput { |
| public: |
| virtual void StartCapture() = 0; |
| virtual void StopCapture() = 0; |
| |
| // Closes the stream. Make sure to call this before the object is |
| // destructed. |
| virtual void ShutDown() = 0; |
| |
| protected: |
| virtual ~PlatformAudioInput() {} |
| }; |
| |
| // Interface for PlatformVideoDecoder is directly inherited from general media |
| // VideoDecodeAccelerator interface. |
| class PlatformVideoDecoder : public media::VideoDecodeAccelerator { |
| public: |
| virtual ~PlatformVideoDecoder() {} |
| }; |
| |
| class PlatformVideoCaptureEventHandler |
| : public media::VideoCapture::EventHandler { |
| public: |
| virtual ~PlatformVideoCaptureEventHandler() {} |
| |
| virtual void OnInitialized(media::VideoCapture* capture, |
| bool succeeded) = 0; |
| }; |
| |
| class PlatformVideoCapture : public media::VideoCapture, |
| public base::RefCounted<PlatformVideoCapture> { |
| public: |
| // Detaches the event handler and stops sending notifications to it. |
| virtual void DetachEventHandler() = 0; |
| |
| protected: |
| virtual ~PlatformVideoCapture() {} |
| |
| private: |
| friend class base::RefCounted<PlatformVideoCapture>; |
| }; |
| |
| // Provides access to the ppapi broker. |
| class Broker { |
| public: |
| // Decrements the references to the broker. |
| // When there are no more references, this renderer's dispatcher is |
| // destroyed, allowing the broker to shutdown if appropriate. |
| // Callers should not reference this object after calling Disconnect(). |
| virtual void Disconnect(webkit::ppapi::PPB_Broker_Impl* client) = 0; |
| |
| protected: |
| virtual ~Broker() {} |
| }; |
| |
| // Notification that the given plugin is focused or unfocused. |
| virtual void PluginFocusChanged(webkit::ppapi::PluginInstance* instance, |
| bool focused) = 0; |
| // Notification that the text input status of the given plugin is changed. |
| virtual void PluginTextInputTypeChanged( |
| webkit::ppapi::PluginInstance* instance) = 0; |
| // Notification that the caret position in the given plugin is changed. |
| virtual void PluginCaretPositionChanged( |
| webkit::ppapi::PluginInstance* instance) = 0; |
| // Notification that the plugin requested to cancel the current composition. |
| virtual void PluginRequestedCancelComposition( |
| webkit::ppapi::PluginInstance* instance) = 0; |
| // Notification that the text selection in the given plugin is changed. |
| virtual void PluginSelectionChanged( |
| webkit::ppapi::PluginInstance* instance) = 0; |
| // Requests simulating IME events for testing purpose. |
| virtual void SimulateImeSetComposition( |
| const string16& text, |
| const std::vector<WebKit::WebCompositionUnderline>& underlines, |
| int selection_start, |
| int selection_end) = 0; |
| virtual void SimulateImeConfirmComposition(const string16& text) = 0; |
| |
| // Notification that the given plugin has crashed. When a plugin crashes, all |
| // instances associated with that plugin will notify that they've crashed via |
| // this function. |
| virtual void PluginCrashed(PluginInstance* instance) = 0; |
| |
| // Indicates that the given instance has been created. |
| virtual void InstanceCreated(PluginInstance* instance) = 0; |
| |
| // Indicates that the given instance is being destroyed. This is called from |
| // the destructor, so it's important that the instance is not dereferenced |
| // from this call. |
| virtual void InstanceDeleted(PluginInstance* instance) = 0; |
| |
| // Creates the resource creation API for the given instance. |
| virtual scoped_ptr< ::ppapi::thunk::ResourceCreationAPI> |
| CreateResourceCreationAPI(PluginInstance* instance) = 0; |
| |
| // Returns a pointer (ownership not transferred) to the bitmap to paint the |
| // sad plugin screen with. Returns NULL on failure. |
| virtual SkBitmap* GetSadPluginBitmap() = 0; |
| |
| // Creates a replacement plug-in that is shown when the plug-in at |file_path| |
| // couldn't be loaded. |
| virtual WebKit::WebPlugin* CreatePluginReplacement( |
| const FilePath& file_path) = 0; |
| |
| // The caller will own the pointer returned from this. |
| virtual PlatformImage2D* CreateImage2D(int width, int height) = 0; |
| |
| // The caller will own the pointer returned from this. |
| virtual PlatformContext3D* CreateContext3D() = 0; |
| |
| // Set that the context will now present to the delegate. |
| virtual void ReparentContext(PlatformContext3D*) = 0; |
| |
| // If |device_id| is empty, the default video capture device will be used. The |
| // user can start using the returned object to capture video right away. |
| // Otherwise, the specified device will be used. The user needs to wait till |
| // |handler| gets an OnInitialized() notification to start using the returned |
| // object. |
| virtual PlatformVideoCapture* CreateVideoCapture( |
| const std::string& device_id, |
| PlatformVideoCaptureEventHandler* handler) = 0; |
| |
| // The caller will own the pointer returned from this. |
| virtual PlatformVideoDecoder* CreateVideoDecoder( |
| media::VideoDecodeAccelerator::Client* client, |
| int32 command_buffer_route_id) = 0; |
| |
| // Get audio hardware output sample rate. |
| virtual uint32_t GetAudioHardwareOutputSampleRate() = 0; |
| |
| // Get audio hardware output buffer size. |
| virtual uint32_t GetAudioHardwareOutputBufferSize() = 0; |
| |
| // The caller is responsible for calling Shutdown() on the returned pointer |
| // to clean up the corresponding resources allocated during this call. |
| virtual PlatformAudioOutput* CreateAudioOutput( |
| uint32_t sample_rate, |
| uint32_t sample_count, |
| PlatformAudioOutputClient* client) = 0; |
| |
| // If |device_id| is empty, the default audio input device will be used. |
| // The caller is responsible for calling Shutdown() on the returned pointer |
| // to clean up the corresponding resources allocated during this call. |
| virtual PlatformAudioInput* CreateAudioInput( |
| const std::string& device_id, |
| uint32_t sample_rate, |
| uint32_t sample_count, |
| PlatformAudioInputClient* client) = 0; |
| |
| // A pointer is returned immediately, but it is not ready to be used until |
| // BrokerConnected has been called. |
| // The caller is responsible for calling Disconnect() on the returned pointer |
| // to clean up the corresponding resources allocated during this call. |
| virtual Broker* ConnectToBroker(webkit::ppapi::PPB_Broker_Impl* client) = 0; |
| |
| // Notifies that the number of find results has changed. |
| virtual void NumberOfFindResultsChanged(int identifier, |
| int total, |
| bool final_result) = 0; |
| |
| // Notifies that the index of the currently selected item has been updated. |
| virtual void SelectedFindResultChanged(int identifier, int index) = 0; |
| |
| // Sends an async IPC to open a local file. |
| typedef base::Callback<void (base::PlatformFileError, base::PassPlatformFile)> |
| AsyncOpenFileCallback; |
| virtual bool AsyncOpenFile(const FilePath& path, |
| int flags, |
| const AsyncOpenFileCallback& callback) = 0; |
| |
| // Sends an async IPC to open a file through filesystem API. |
| // When a file is successfully opened, |callback| is invoked with |
| // PLATFORM_FILE_OK, the opened file handle, and a callback function for |
| // notifying that the file is closed. When the users of this function |
| // finished using the file, they must close the file handle and then must call |
| // the supplied callback function. |
| typedef base::Callback<void (base::PlatformFileError)> |
| NotifyCloseFileCallback; |
| typedef base::Callback< |
| void (base::PlatformFileError, |
| base::PassPlatformFile, |
| const NotifyCloseFileCallback&)> AsyncOpenFileSystemURLCallback; |
| virtual bool AsyncOpenFileSystemURL( |
| const GURL& path, |
| int flags, |
| const AsyncOpenFileSystemURLCallback& callback) = 0; |
| |
| virtual bool OpenFileSystem( |
| const GURL& origin_url, |
| fileapi::FileSystemType type, |
| long long size, |
| fileapi::FileSystemCallbackDispatcher* dispatcher) = 0; |
| virtual bool MakeDirectory( |
| const GURL& path, |
| bool recursive, |
| fileapi::FileSystemCallbackDispatcher* dispatcher) = 0; |
| virtual bool Query(const GURL& path, |
| fileapi::FileSystemCallbackDispatcher* dispatcher) = 0; |
| virtual bool Touch(const GURL& path, |
| const base::Time& last_access_time, |
| const base::Time& last_modified_time, |
| fileapi::FileSystemCallbackDispatcher* dispatcher) = 0; |
| virtual bool Delete(const GURL& path, |
| fileapi::FileSystemCallbackDispatcher* dispatcher) = 0; |
| virtual bool Rename(const GURL& file_path, |
| const GURL& new_file_path, |
| fileapi::FileSystemCallbackDispatcher* dispatcher) = 0; |
| virtual bool ReadDirectory( |
| const GURL& directory_path, |
| fileapi::FileSystemCallbackDispatcher* dispatcher) = 0; |
| |
| // For quota handlings for FileIO API. |
| typedef base::Callback<void (int64)> AvailableSpaceCallback; |
| virtual void QueryAvailableSpace(const GURL& origin, |
| quota::StorageType type, |
| const AvailableSpaceCallback& callback) = 0; |
| virtual void WillUpdateFile(const GURL& file_path) = 0; |
| virtual void DidUpdateFile(const GURL& file_path, int64_t delta) = 0; |
| |
| virtual base::PlatformFileError OpenFile( |
| const ::ppapi::PepperFilePath& path, |
| int flags, |
| base::PlatformFile* file) = 0; |
| virtual base::PlatformFileError RenameFile( |
| const ::ppapi::PepperFilePath& from_path, |
| const ::ppapi::PepperFilePath& to_path) = 0; |
| virtual base::PlatformFileError DeleteFileOrDir( |
| const ::ppapi::PepperFilePath& path, |
| bool recursive) = 0; |
| virtual base::PlatformFileError CreateDir( |
| const ::ppapi::PepperFilePath& path) = 0; |
| virtual base::PlatformFileError QueryFile( |
| const ::ppapi::PepperFilePath& path, |
| base::PlatformFileInfo* info) = 0; |
| virtual base::PlatformFileError GetDirContents( |
| const ::ppapi::PepperFilePath& path, |
| ::ppapi::DirContents* contents) = 0; |
| virtual base::PlatformFileError CreateTemporaryFile( |
| base::PlatformFile* file) = 0; |
| |
| // Synchronously returns the platform file path for a filesystem URL. |
| virtual void SyncGetFileSystemPlatformPath(const GURL& url, |
| FilePath* platform_path) = 0; |
| |
| // Returns a MessageLoopProxy instance associated with the message loop |
| // of the file thread in this renderer. |
| virtual scoped_refptr<base::MessageLoopProxy> |
| GetFileThreadMessageLoopProxy() = 0; |
| |
| // For PPB_TCPSocket_Private. |
| virtual uint32 TCPSocketCreate() = 0; |
| virtual void TCPSocketConnect(PPB_TCPSocket_Private_Impl* socket, |
| uint32 socket_id, |
| const std::string& host, |
| uint16_t port) = 0; |
| virtual void TCPSocketConnectWithNetAddress( |
| PPB_TCPSocket_Private_Impl* socket, |
| uint32 socket_id, |
| const PP_NetAddress_Private& addr) = 0; |
| virtual void TCPSocketSSLHandshake( |
| uint32 socket_id, |
| const std::string& server_name, |
| uint16_t server_port, |
| const std::vector<std::vector<char> >& trusted_certs, |
| const std::vector<std::vector<char> >& untrusted_certs) = 0; |
| virtual void TCPSocketRead(uint32 socket_id, int32_t bytes_to_read) = 0; |
| virtual void TCPSocketWrite(uint32 socket_id, const std::string& buffer) = 0; |
| virtual void TCPSocketDisconnect(uint32 socket_id) = 0; |
| virtual void RegisterTCPSocket(PPB_TCPSocket_Private_Impl* socket, |
| uint32 socket_id) = 0; |
| |
| // For PPB_UDPSocket_Private. |
| virtual uint32 UDPSocketCreate() = 0; |
| virtual void UDPSocketSetBoolSocketFeature(PPB_UDPSocket_Private_Impl* socket, |
| uint32 socket_id, |
| int32_t name, |
| bool value) = 0; |
| virtual void UDPSocketBind(PPB_UDPSocket_Private_Impl* socket, |
| uint32 socket_id, |
| const PP_NetAddress_Private& addr) = 0; |
| virtual void UDPSocketRecvFrom(uint32 socket_id, int32_t num_bytes) = 0; |
| virtual void UDPSocketSendTo(uint32 socket_id, |
| const std::string& buffer, |
| const PP_NetAddress_Private& addr) = 0; |
| virtual void UDPSocketClose(uint32 socket_id) = 0; |
| |
| // For PPB_TCPServerSocket_Private. |
| virtual void TCPServerSocketListen(PP_Resource socket_resource, |
| const PP_NetAddress_Private& addr, |
| int32_t backlog) = 0; |
| virtual void TCPServerSocketAccept(uint32 server_socket_id) = 0; |
| virtual void TCPServerSocketStopListening( |
| PP_Resource socket_resource, |
| uint32 socket_id) = 0; |
| |
| // For PPB_HostResolver_Private. |
| virtual void RegisterHostResolver( |
| ::ppapi::PPB_HostResolver_Shared* host_resolver, |
| uint32 host_resolver_id) = 0; |
| virtual void HostResolverResolve( |
| uint32 host_resolver_id, |
| const ::ppapi::HostPortPair& host_port, |
| const PP_HostResolver_Private_Hint* hint) = 0; |
| virtual void UnregisterHostResolver(uint32 host_resolver_id) = 0; |
| |
| // Add/remove a network list observer. |
| virtual bool AddNetworkListObserver( |
| webkit_glue::NetworkListObserver* observer) = 0; |
| virtual void RemoveNetworkListObserver( |
| webkit_glue::NetworkListObserver* observer) = 0; |
| |
| // For PPB_X509Certificate_Private. |
| virtual bool X509CertificateParseDER( |
| const std::vector<char>& der, |
| ::ppapi::PPB_X509Certificate_Fields* fields) = 0; |
| |
| // Show the given context menu at the given position (in the plugin's |
| // coordinates). |
| virtual int32_t ShowContextMenu( |
| PluginInstance* instance, |
| webkit::ppapi::PPB_Flash_Menu_Impl* menu, |
| const gfx::Point& position) = 0; |
| |
| // Create a fullscreen container for a plugin instance. This effectively |
| // switches the plugin to fullscreen. |
| virtual FullscreenContainer* CreateFullscreenContainer( |
| PluginInstance* instance) = 0; |
| |
| // Gets the size of the screen. The fullscreen window will be created at that |
| // size. |
| virtual gfx::Size GetScreenSize() = 0; |
| |
| // Returns a string with the name of the default 8-bit char encoding. |
| virtual std::string GetDefaultEncoding() = 0; |
| |
| // Sets the minimum and maximum zoom factors. |
| virtual void ZoomLimitsChanged(double minimum_factor, |
| double maximum_factor) = 0; |
| |
| // Retrieves the proxy information for the given URL in PAC format. On error, |
| // this will return an empty string. |
| virtual std::string ResolveProxy(const GURL& url) = 0; |
| |
| // Tell the browser when resource loading starts/ends. |
| virtual void DidStartLoading() = 0; |
| virtual void DidStopLoading() = 0; |
| |
| // Sets restrictions on how the content can be used (i.e. no print/copy). |
| virtual void SetContentRestriction(int restrictions) = 0; |
| |
| // Tells the browser to bring up SaveAs dialog to save specified URL. |
| virtual void SaveURLAs(const GURL& url) = 0; |
| |
| virtual double GetLocalTimeZoneOffset(base::Time t) = 0; |
| |
| // Create an anonymous shared memory segment of size |size| bytes, and return |
| // a pointer to it, or NULL on error. Caller owns the returned pointer. |
| virtual base::SharedMemory* CreateAnonymousSharedMemory(uint32_t size) = 0; |
| |
| // Returns the current preferences. |
| virtual ::ppapi::Preferences GetPreferences() = 0; |
| |
| // Locks the mouse for |instance|. If false is returned, the lock is not |
| // possible. If true is returned then the lock is pending. Success or |
| // failure will be delivered asynchronously via |
| // PluginInstance::OnLockMouseACK(). |
| virtual bool LockMouse(PluginInstance* instance) = 0; |
| |
| // Unlocks the mouse if |instance| currently owns the mouse lock. Whenever an |
| // plugin instance has lost the mouse lock, it will be notified by |
| // PluginInstance::OnMouseLockLost(). Please note that UnlockMouse() is not |
| // the only cause of losing mouse lock. For example, a user may press the Esc |
| // key to quit the mouse lock mode, which also results in an OnMouseLockLost() |
| // call to the current mouse lock owner. |
| virtual void UnlockMouse(PluginInstance* instance) = 0; |
| |
| // Returns true iff |instance| currently owns the mouse lock. |
| virtual bool IsMouseLocked(PluginInstance* instance) = 0; |
| |
| // Notifies that |instance| has changed the cursor. |
| // This will update the cursor appearance if it is currently over the plugin |
| // instance. |
| virtual void DidChangeCursor(PluginInstance* instance, |
| const WebKit::WebCursorInfo& cursor) = 0; |
| |
| // Notifies that |instance| has received a mouse event. |
| virtual void DidReceiveMouseEvent(PluginInstance* instance) = 0; |
| |
| // Determines if the browser entered fullscreen mode. |
| virtual bool IsInFullscreenMode() = 0; |
| |
| // Retrieve current gamepad data. |
| virtual void SampleGamepads(WebKit::WebGamepads* data) = 0; |
| |
| // Returns true if the containing page is visible. |
| virtual bool IsPageVisible() const = 0; |
| |
| typedef base::Callback< |
| void (int /* request_id */, |
| bool /* succeeded */, |
| const std::vector< ::ppapi::DeviceRefData>& /* devices */)> |
| EnumerateDevicesCallback; |
| |
| // Enumerates devices of the specified type. The request ID passed into the |
| // callback will be the same as the return value. |
| virtual int EnumerateDevices(PP_DeviceType_Dev type, |
| const EnumerateDevicesCallback& callback) = 0; |
| // Stop enumerating devices of the specified |request_id|. The |request_id| |
| // is the return value of EnumerateDevicesCallback. |
| virtual void StopEnumerateDevices(int request_id) = 0; |
| // Create a ClipboardClient for writing to the clipboard. The caller will own |
| // the pointer to this. |
| virtual webkit_glue::ClipboardClient* CreateClipboardClient() const = 0; |
| |
| // Returns a Device ID |
| virtual std::string GetDeviceID() = 0; |
| |
| // Returns restrictions on local data handled by the plug-in. |
| virtual PP_FlashLSORestrictions GetLocalDataRestrictions( |
| const GURL& document_url, |
| const GURL& plugin_url) = 0; |
| }; |
| |
| } // namespace ppapi |
| } // namespace webkit |
| |
| #endif // WEBKIT_PLUGINS_PPAPI_PLUGIN_DELEGATE_H_ |