Index: chrome/renderer/webplugin_delegate_proxy.h |
=================================================================== |
--- chrome/renderer/webplugin_delegate_proxy.h (revision 78516) |
+++ chrome/renderer/webplugin_delegate_proxy.h (working copy) |
@@ -1,275 +0,0 @@ |
-// Copyright (c) 2010 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 CHROME_RENDERER_WEBPLUGIN_DELEGATE_PROXY_H_ |
-#define CHROME_RENDERER_WEBPLUGIN_DELEGATE_PROXY_H_ |
-#pragma once |
- |
-#include <string> |
-#include <vector> |
- |
-#include "app/surface/transport_dib.h" |
-#include "base/ref_counted.h" |
-#include "base/scoped_ptr.h" |
-#include "base/weak_ptr.h" |
-#include "googleurl/src/gurl.h" |
-#include "ipc/ipc_channel.h" |
-#include "ipc/ipc_message.h" |
-#include "ui/gfx/native_widget_types.h" |
-#include "ui/gfx/rect.h" |
-#include "webkit/plugins/npapi/webplugininfo.h" |
-#include "webkit/plugins/npapi/webplugin_delegate.h" |
- |
-#if defined(OS_MACOSX) |
-#include "base/hash_tables.h" |
-#include "base/linked_ptr.h" |
-#endif |
- |
-struct NPObject; |
-class NPObjectStub; |
-struct NPVariant_Param; |
-class PluginChannelHost; |
-struct PluginHostMsg_URLRequest_Params; |
-class RenderView; |
-class SkBitmap; |
- |
-namespace base { |
-class SharedMemory; |
-class WaitableEvent; |
-} |
- |
-namespace skia { |
-class PlatformCanvas; |
-} |
- |
-namespace webkit { |
-namespace npapi { |
-class WebPlugin; |
-} |
-} |
- |
-// An implementation of WebPluginDelegate that proxies all calls to |
-// the plugin process. |
-class WebPluginDelegateProxy |
- : public webkit::npapi::WebPluginDelegate, |
- public IPC::Channel::Listener, |
- public IPC::Message::Sender, |
- public base::SupportsWeakPtr<WebPluginDelegateProxy> { |
- public: |
- WebPluginDelegateProxy(const std::string& mime_type, |
- const base::WeakPtr<RenderView>& render_view); |
- |
- // WebPluginDelegate implementation: |
- virtual void PluginDestroyed(); |
- virtual bool Initialize(const GURL& url, |
- const std::vector<std::string>& arg_names, |
- const std::vector<std::string>& arg_values, |
- webkit::npapi::WebPlugin* plugin, |
- bool load_manually); |
- virtual void UpdateGeometry(const gfx::Rect& window_rect, |
- const gfx::Rect& clip_rect); |
- virtual void Paint(WebKit::WebCanvas* canvas, const gfx::Rect& rect); |
- virtual void Print(gfx::NativeDrawingContext context); |
- virtual NPObject* GetPluginScriptableObject(); |
- virtual void DidFinishLoadWithReason(const GURL& url, NPReason reason, |
- int notify_id); |
- virtual void SetFocus(bool focused); |
- virtual bool HandleInputEvent(const WebKit::WebInputEvent& event, |
- WebKit::WebCursorInfo* cursor); |
- virtual int GetProcessId(); |
- |
- // Informs the plugin that its containing content view has gained or lost |
- // first responder status. |
- virtual void SetContentAreaFocus(bool has_focus); |
-#if defined(OS_MACOSX) |
- // Informs the plugin that its enclosing window has gained or lost focus. |
- virtual void SetWindowFocus(bool window_has_focus); |
- // Informs the plugin that its container (window/tab) has changed visibility. |
- virtual void SetContainerVisibility(bool is_visible); |
- // Informs the plugin that its enclosing window's frame has changed. |
- virtual void WindowFrameChanged(gfx::Rect window_frame, gfx::Rect view_frame); |
- // Informs the plugin that plugin IME has completed. |
- // If |text| is empty, composition was cancelled. |
- virtual void ImeCompositionCompleted(const string16& text, int plugin_id); |
-#endif |
- |
- // IPC::Channel::Listener implementation: |
- virtual bool OnMessageReceived(const IPC::Message& msg); |
- virtual void OnChannelError(); |
- |
- // IPC::Message::Sender implementation: |
- virtual bool Send(IPC::Message* msg); |
- |
- virtual void SendJavaScriptStream(const GURL& url, |
- const std::string& result, |
- bool success, |
- int notify_id); |
- |
- virtual void DidReceiveManualResponse(const GURL& url, |
- const std::string& mime_type, |
- const std::string& headers, |
- uint32 expected_length, |
- uint32 last_modified); |
- virtual void DidReceiveManualData(const char* buffer, int length); |
- virtual void DidFinishManualLoading(); |
- virtual void DidManualLoadFail(); |
- virtual void InstallMissingPlugin(); |
- virtual webkit::npapi::WebPluginResourceClient* CreateResourceClient( |
- unsigned long resource_id, const GURL& url, int notify_id); |
- virtual webkit::npapi::WebPluginResourceClient* CreateSeekableResourceClient( |
- unsigned long resource_id, int range_request_id); |
- |
- gfx::PluginWindowHandle GetPluginWindowHandle(); |
- |
- protected: |
- template<class WebPluginDelegateProxy> friend class DeleteTask; |
- ~WebPluginDelegateProxy(); |
- |
- private: |
- // Message handlers for messages that proxy WebPlugin methods, which |
- // we translate into calls to the real WebPlugin. |
- void OnSetWindow(gfx::PluginWindowHandle window); |
-#if defined(OS_WIN) |
- void OnSetWindowlessPumpEvent(HANDLE modal_loop_pump_messages_event); |
-#endif |
- void OnCompleteURL(const std::string& url_in, std::string* url_out, |
- bool* result); |
- void OnHandleURLRequest(const PluginHostMsg_URLRequest_Params& params); |
- void OnCancelResource(int id); |
- void OnInvalidateRect(const gfx::Rect& rect); |
- void OnGetWindowScriptNPObject(int route_id, bool* success); |
- void OnGetPluginElement(int route_id, bool* success); |
- void OnSetCookie(const GURL& url, |
- const GURL& first_party_for_cookies, |
- const std::string& cookie); |
- void OnGetCookies(const GURL& url, const GURL& first_party_for_cookies, |
- std::string* cookies); |
- void OnMissingPluginStatus(int status); |
- void OnCancelDocumentLoad(); |
- void OnInitiateHTTPRangeRequest(const std::string& url, |
- const std::string& range_info, |
- int range_request_id); |
- void OnDeferResourceLoading(unsigned long resource_id, bool defer); |
- |
-#if defined(OS_MACOSX) |
- void OnFocusChanged(bool focused); |
- void OnStartIme(); |
- void OnBindFakePluginWindowHandle(bool opaque); |
- void OnUpdateGeometry_ACK(int ack_key); |
- void OnAcceleratedSurfaceSetIOSurface(gfx::PluginWindowHandle window, |
- int32 width, |
- int32 height, |
- uint64 io_surface_identifier); |
- void OnAcceleratedSurfaceSetTransportDIB(gfx::PluginWindowHandle window, |
- int32 width, |
- int32 height, |
- TransportDIB::Handle transport_dib); |
- void OnAcceleratedSurfaceAllocTransportDIB(size_t size, |
- TransportDIB::Handle* dib_handle); |
- void OnAcceleratedSurfaceFreeTransportDIB(TransportDIB::Id dib_id); |
- void OnAcceleratedSurfaceBuffersSwapped(gfx::PluginWindowHandle window, |
- uint64 surface_id); |
-#endif |
- |
- void OnURLRedirectResponse(bool allow, int resource_id); |
- |
- // Draw a graphic indicating a crashed plugin. |
- void PaintSadPlugin(WebKit::WebCanvas* canvas, const gfx::Rect& rect); |
- |
- // Returns true if the given rectangle is different in the native drawing |
- // context and the current background bitmap. |
- bool BackgroundChanged(gfx::NativeDrawingContext context, |
- const gfx::Rect& rect); |
- |
- // Copies the given rectangle from the transport bitmap to the backing store. |
- void CopyFromTransportToBacking(const gfx::Rect& rect); |
- |
- // Clears the shared memory section and canvases used for windowless plugins. |
- void ResetWindowlessBitmaps(); |
- |
-#if !defined(OS_WIN) |
- // Creates a process-local memory section and canvas. PlatformCanvas on |
- // Windows only works with a DIB, not arbitrary memory. |
- bool CreateLocalBitmap(std::vector<uint8>* memory, |
- scoped_ptr<skia::PlatformCanvas>* canvas); |
-#endif |
- |
- // Creates a shared memory section and canvas. |
- bool CreateSharedBitmap(scoped_ptr<TransportDIB>* memory, |
- scoped_ptr<skia::PlatformCanvas>* canvas); |
- |
- // Called for cleanup during plugin destruction. Normally right before the |
- // plugin window gets destroyed, or when the plugin has crashed (at which |
- // point the window has already been destroyed). |
- void WillDestroyWindow(); |
- |
-#if defined(OS_MACOSX) |
- // Synthesize a fake window handle for the plug-in to identify the instance |
- // to the browser, allowing mapping to a surface for hardware acceleration |
- // of plug-in content. The browser generates the handle which is then set on |
- // the plug-in. Returns true if it successfully sets the window handle on the |
- // plug-in. |
- bool BindFakePluginWindowHandle(bool opaque); |
- |
- typedef base::hash_map<int, linked_ptr<TransportDIB> > OldTransportDIBMap; |
- |
- OldTransportDIBMap old_transport_dibs_; |
-#endif // OS_MACOSX |
- |
-#if defined(OS_WIN) |
- // Returns true if we should update the plugin geometry synchronously. |
- bool UseSynchronousGeometryUpdates(); |
-#endif |
- |
- base::WeakPtr<RenderView> render_view_; |
- webkit::npapi::WebPlugin* plugin_; |
- bool uses_shared_bitmaps_; |
- gfx::PluginWindowHandle window_; |
- scoped_refptr<PluginChannelHost> channel_host_; |
- std::string mime_type_; |
- int instance_id_; |
- webkit::npapi::WebPluginInfo info_; |
- |
- gfx::Rect plugin_rect_; |
- gfx::Rect clip_rect_; |
- |
- NPObject* npobject_; |
- base::WeakPtr<NPObjectStub> window_script_object_; |
- |
- // Event passed in by the plugin process and is used to decide if |
- // messages need to be pumped in the NPP_HandleEvent sync call. |
- scoped_ptr<base::WaitableEvent> modal_loop_pump_messages_event_; |
- |
- // Bitmap for crashed plugin |
- SkBitmap* sad_plugin_; |
- |
- // True if we got an invalidate from the plugin and are waiting for a paint. |
- bool invalidate_pending_; |
- |
- // Used to desynchronize windowless painting. When WebKit paints, we bitblt |
- // from our backing store of what the plugin rectangle looks like. The |
- // plugin paints into the transport store, and we copy that to our backing |
- // store when we get an invalidate from it. The background bitmap is used |
- // for transparent plugins, as they need the backgroud data during painting. |
- bool transparent_; |
-#if defined(OS_WIN) |
- scoped_ptr<TransportDIB> backing_store_; |
-#else |
- std::vector<uint8> backing_store_; |
-#endif |
- scoped_ptr<skia::PlatformCanvas> backing_store_canvas_; |
- scoped_ptr<TransportDIB> transport_store_; |
- scoped_ptr<skia::PlatformCanvas> transport_store_canvas_; |
- scoped_ptr<TransportDIB> background_store_; |
- scoped_ptr<skia::PlatformCanvas> background_store_canvas_; |
- // This lets us know which portion of the backing store has been painted into. |
- gfx::Rect backing_store_painted_; |
- |
- // The url of the main frame hosting the plugin. |
- GURL page_url_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebPluginDelegateProxy); |
-}; |
- |
-#endif // CHROME_RENDERER_WEBPLUGIN_DELEGATE_PROXY_H_ |