Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Unified Diff: content/renderer/browser_plugin/browser_plugin.h

Issue 11826005: Browser Plugin: Implement BrowserPluginObserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge with ToT Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/browser_plugin/browser_plugin.h
diff --git a/content/renderer/browser_plugin/browser_plugin.h b/content/renderer/browser_plugin/browser_plugin.h
deleted file mode 100644
index 14ea94980377ea2fb35fd82578198be17797745c..0000000000000000000000000000000000000000
--- a/content/renderer/browser_plugin/browser_plugin.h
+++ /dev/null
@@ -1,410 +0,0 @@
-// 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 CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_
-#define CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_
-
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h"
-
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/process_util.h"
-#include "base/sequenced_task_runner_helpers.h"
-#if defined(OS_WIN)
-#include "base/shared_memory.h"
-#endif
-#include "content/common/browser_plugin_message_enums.h"
-#include "content/renderer/browser_plugin/browser_plugin_backing_store.h"
-#include "content/renderer/browser_plugin/browser_plugin_bindings.h"
-#include "content/renderer/render_view_impl.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebDragStatus.h"
-
-struct BrowserPluginHostMsg_AutoSize_Params;
-struct BrowserPluginHostMsg_ResizeGuest_Params;
-struct BrowserPluginMsg_LoadCommit_Params;
-struct BrowserPluginMsg_UpdateRect_Params;
-
-namespace content {
-
-class BrowserPluginCompositingHelper;
-class BrowserPluginManager;
-class MockBrowserPlugin;
-
-class CONTENT_EXPORT BrowserPlugin :
- NON_EXPORTED_BASE(public WebKit::WebPlugin) {
- public:
- RenderViewImpl* render_view() const { return render_view_.get(); }
- int render_view_routing_id() const { return render_view_routing_id_; }
-
- bool OnMessageReceived(const IPC::Message& msg);
-
- // Update Browser Plugin's DOM Node attribute |attribute_name| with the value
- // |attribute_value|.
- void UpdateDOMAttribute(const std::string& attribute_name,
- const std::string& attribute_value);
- // Remove the DOM Node attribute with the name |attribute_name|.
- void RemoveDOMAttribute(const std::string& attribute_name);
- // Get Browser Plugin's DOM Node attribute |attribute_name|'s value.
- std::string GetDOMAttributeValue(const std::string& attribute_name) const;
- // Checks if the attribute |attribute_name| exists in the DOM.
- bool HasDOMAttribute(const std::string& attribute_name) const;
-
- // Get the name attribute value.
- std::string GetNameAttribute() const;
- // Parse the name attribute value.
- void ParseNameAttribute();
- // Get the src attribute value of the BrowserPlugin instance.
- std::string GetSrcAttribute() const;
- // Parse the src attribute value of the BrowserPlugin instance.
- bool ParseSrcAttribute(std::string* error_message);
- // Get the autosize attribute value.
- bool GetAutoSizeAttribute() const;
- // Parses the autosize attribute value.
- void ParseAutoSizeAttribute();
- // Get the maxheight attribute value.
- int GetMaxHeightAttribute() const;
- // Get the maxwidth attribute value.
- int GetMaxWidthAttribute() const;
- // Get the minheight attribute value.
- int GetMinHeightAttribute() const;
- // Get the minwidth attribute value.
- int GetMinWidthAttribute() const;
- // Parse the minwidth, maxwidth, minheight, and maxheight attribute values.
- void ParseSizeContraintsChanged();
- // The partition identifier string is stored as UTF-8.
- std::string GetPartitionAttribute() const;
- // This method can be successfully called only before the first navigation for
- // this instance of BrowserPlugin. If an error occurs, the |error_message| is
- // set appropriately to indicate the failure reason.
- bool ParsePartitionAttribute(std::string* error_message);
- // True if the partition attribute can be removed.
- bool CanRemovePartitionAttribute(std::string* error_message);
-
- bool InAutoSizeBounds(const gfx::Size& size) const;
-
- // Get the guest's DOMWindow proxy.
- NPObject* GetContentWindow() const;
-
- // Returns Chrome's process ID for the current guest.
- int guest_process_id() const { return guest_process_id_; }
- // Returns Chrome's route ID for the current guest.
- int guest_route_id() const { return guest_route_id_; }
- // Returns whether the guest process has crashed.
- bool guest_crashed() const { return guest_crashed_; }
-
- // Query whether the guest can navigate back to the previous entry.
- bool CanGoBack() const;
- // Query whether the guest can navigation forward to the next entry.
- bool CanGoForward() const;
-
- // Informs the guest of an updated focus state.
- void UpdateGuestFocusState();
- // Indicates whether the guest should be focused.
- bool ShouldGuestBeFocused() const;
-
- // Tells the BrowserPlugin to tell the guest to navigate to the previous
- // navigation entry in the navigation history.
- void Back();
- // Tells the BrowserPlugin to tell the guest to navigate to the next
- // navigation entry in the navigation history.
- void Forward();
- // Tells the BrowserPlugin to tell the guest to navigate to a position
- // relative to the current index in its navigation history.
- void Go(int relativeIndex);
- // Tells the BrowserPlugin to terminate the guest process.
- void TerminateGuest();
-
- // A request from JavaScript has been made to stop the loading of the page.
- void Stop();
- // A request from JavaScript has been made to reload the page.
- void Reload();
- // A request to enable hardware compositing.
- void EnableCompositing(bool enable);
- // A request from content client to track lifetime of a JavaScript object
- // related to a permission request object.
- // This is used to clean up hanging permission request objects.
- void PersistRequestObject(const NPVariant* request,
- const std::string& type,
- int id);
-
- // Returns true if |point| lies within the bounds of the plugin rectangle.
- // Not OK to use this function for making security-sensitive decision since it
- // can return false positives when the plugin has rotation transformation
- // applied.
- bool InBounds(const gfx::Point& point) const;
-
- gfx::Point ToLocalCoordinates(const gfx::Point& point) const;
- // Called by browser plugin binding.
- void OnEmbedderDecidedPermission(int request_id, bool allow);
-
-
- // WebKit::WebPlugin implementation.
- virtual WebKit::WebPluginContainer* container() const OVERRIDE;
- virtual bool initialize(WebKit::WebPluginContainer* container) OVERRIDE;
- virtual void destroy() OVERRIDE;
- virtual NPObject* scriptableObject() OVERRIDE;
- virtual bool supportsKeyboardFocus() const OVERRIDE;
- virtual bool canProcessDrag() const OVERRIDE;
- virtual void paint(
- WebKit::WebCanvas* canvas,
- const WebKit::WebRect& rect) OVERRIDE;
- virtual void updateGeometry(
- const WebKit::WebRect& frame_rect,
- const WebKit::WebRect& clip_rect,
- const WebKit::WebVector<WebKit::WebRect>& cut_outs_rects,
- bool is_visible) OVERRIDE;
- virtual void updateFocus(bool focused) OVERRIDE;
- virtual void updateVisibility(bool visible) OVERRIDE;
- virtual bool acceptsInputEvents() OVERRIDE;
- virtual bool handleInputEvent(
- const WebKit::WebInputEvent& event,
- WebKit::WebCursorInfo& cursor_info) OVERRIDE;
- virtual bool handleDragStatusUpdate(WebKit::WebDragStatus drag_status,
- const WebKit::WebDragData& drag_data,
- WebKit::WebDragOperationsMask mask,
- const WebKit::WebPoint& position,
- const WebKit::WebPoint& screen) OVERRIDE;
- virtual void didReceiveResponse(
- const WebKit::WebURLResponse& response) OVERRIDE;
- virtual void didReceiveData(const char* data, int data_length) OVERRIDE;
- virtual void didFinishLoading() OVERRIDE;
- virtual void didFailLoading(const WebKit::WebURLError& error) OVERRIDE;
- virtual void didFinishLoadingFrameRequest(
- const WebKit::WebURL& url,
- void* notify_data) OVERRIDE;
- virtual void didFailLoadingFrameRequest(
- const WebKit::WebURL& url,
- void* notify_data,
- const WebKit::WebURLError& error) OVERRIDE;
- private:
- friend class base::DeleteHelper<BrowserPlugin>;
- // Only the manager is allowed to create a BrowserPlugin.
- friend class BrowserPluginManagerImpl;
- friend class MockBrowserPluginManager;
-
- // For unit/integration tests.
- friend class MockBrowserPlugin;
-
- // A BrowserPlugin object is a controller that represents an instance of a
- // browser plugin within the embedder renderer process. Each BrowserPlugin
- // within a process has a unique instance_id that is used to route messages
- // to it. It takes in a RenderViewImpl that it's associated with along
- // with the frame within which it lives and the initial attributes assigned
- // to it on creation.
- BrowserPlugin(
- RenderViewImpl* render_view,
- WebKit::WebFrame* frame,
- const WebKit::WebPluginParams& params);
-
- virtual ~BrowserPlugin();
-
- int width() const { return plugin_rect_.width(); }
- int height() const { return plugin_rect_.height(); }
- int instance_id() const { return instance_id_; }
- // Gets the Max Height value used for auto size.
- int GetAdjustedMaxHeight() const;
- // Gets the Max Width value used for auto size.
- int GetAdjustedMaxWidth() const;
- // Gets the Min Height value used for auto size.
- int GetAdjustedMinHeight() const;
- // Gets the Min Width value used for auto size.
- int GetAdjustedMinWidth() const;
- BrowserPluginManager* browser_plugin_manager() const {
- return browser_plugin_manager_;
- }
-
- // Virtual to allow for mocking in tests.
- virtual float GetDeviceScaleFactor() const;
-
- // Parses the attributes of the browser plugin from the element's attributes
- // and sets them appropriately.
- void ParseAttributes();
-
- // Triggers the event-listeners for |event_name|. Note that the function
- // frees all the values in |props|.
- void TriggerEvent(const std::string& event_name,
- std::map<std::string, base::Value*>* props);
-
- // Creates and maps a shared damage buffer.
- virtual base::SharedMemory* CreateDamageBuffer(
- const size_t size,
- base::SharedMemoryHandle* shared_memory_handle);
- // Swaps out the |current_damage_buffer_| with the |pending_damage_buffer_|.
- void SwapDamageBuffers();
-
- // Populates BrowserPluginHostMsg_ResizeGuest_Params with resize state and
- // allocates a new |pending_damage_buffer_| if in software rendering mode.
- void PopulateResizeGuestParameters(
- BrowserPluginHostMsg_ResizeGuest_Params* params,
- const gfx::Size& view_size);
-
- // Populates BrowserPluginHostMsg_AutoSize_Params object with autosize state.
- void PopulateAutoSizeParameters(
- BrowserPluginHostMsg_AutoSize_Params* params, bool current_auto_size);
-
- // Populates both AutoSize and ResizeGuest parameters based on the current
- // autosize state.
- void GetDamageBufferWithSizeParams(
- BrowserPluginHostMsg_AutoSize_Params* auto_size_params,
- BrowserPluginHostMsg_ResizeGuest_Params* resize_guest_params);
-
- // Informs the guest of an updated autosize state.
- void UpdateGuestAutoSizeState(bool current_auto_size);
-
- // Informs the BrowserPlugin that guest has changed its size in autosize mode.
- void SizeChangedDueToAutoSize(const gfx::Size& old_view_size);
-
- bool HasEventListeners(const std::string& event_name);
-
- // Indicates whether a damage buffer was used by the guest process for the
- // provided |params|.
- static bool UsesDamageBuffer(
- const BrowserPluginMsg_UpdateRect_Params& params);
-
- // Indicates whether the |pending_damage_buffer_| was used to copy over pixels
- // given the provided |params|.
- bool UsesPendingDamageBuffer(
- const BrowserPluginMsg_UpdateRect_Params& params);
-
- // Sets the instance ID of the BrowserPlugin and requests a guest from the
- // browser process.
- void SetInstanceID(int instance_id);
-
- // Requests media access permission from the embedder.
- void RequestMediaPermission(int request_id,
- const base::DictionaryValue& request_info);
- // Informs the BrowserPlugin that the guest's permission request has been
- // allowed or denied by the embedder.
- void RespondPermission(BrowserPluginPermissionType permission_type,
- int request_id,
- bool allow);
-
- // If the request with id |request_id| is pending then informs the
- // BrowserPlugin that the guest's permission request has been allowed or
- // denied by the embedder.
- void RespondPermissionIfRequestIsPending(int request_id, bool allow);
- // Cleans up pending permission request once the associated event.request
- // object goes out of scope in JavaScript.
- void OnRequestObjectGarbageCollected(int request_id);
- // V8 garbage collection callback for |object|.
- static void WeakCallbackForPersistObject(v8::Persistent<v8::Value> object,
- void* param);
-
- // IPC message handlers.
- // Please keep in alphabetical order.
- void OnAdvanceFocus(int instance_id, bool reverse);
- void OnBuffersSwapped(int instance_id,
- const gfx::Size& size,
- std::string mailbox_name,
- int gpu_route_id,
- int gpu_host_id);
- void OnGuestContentWindowReady(int instance_id,
- int content_window_routing_id);
- void OnGuestGone(int instance_id, int process_id, int status);
- void OnGuestResponsive(int instance_id, int process_id);
- void OnGuestUnresponsive(int instance_id, int process_id);
- void OnLoadAbort(int instance_id,
- const GURL& url,
- bool is_top_level,
- const std::string& type);
- void OnLoadCommit(int instance_id,
- const BrowserPluginMsg_LoadCommit_Params& params);
- void OnLoadRedirect(int instance_id,
- const GURL& old_url,
- const GURL& new_url,
- bool is_top_level);
- void OnLoadStart(int instance_id, const GURL& url, bool is_top_level);
- void OnLoadStop(int instance_id);
- // Requests permission from the embedder.
- void OnRequestPermission(int instance_id,
- BrowserPluginPermissionType permission_type,
- int request_id,
- const base::DictionaryValue& request_info);
- void OnSetCursor(int instance_id, const WebCursor& cursor);
- void OnShouldAcceptTouchEvents(int instance_id, bool accept);
- void OnUpdatedName(int instance_id, const std::string& name);
- void OnUpdateRect(int instance_id,
- const BrowserPluginMsg_UpdateRect_Params& params);
-
- int instance_id_;
- base::WeakPtr<RenderViewImpl> render_view_;
- // We cache the |render_view_|'s routing ID because we need it on destruction.
- // If the |render_view_| is destroyed before the BrowserPlugin is destroyed
- // then we will attempt to access a NULL pointer.
- int render_view_routing_id_;
- WebKit::WebPluginContainer* container_;
- scoped_ptr<BrowserPluginBindings> bindings_;
- scoped_ptr<BrowserPluginBackingStore> backing_store_;
- scoped_ptr<base::SharedMemory> current_damage_buffer_;
- scoped_ptr<base::SharedMemory> pending_damage_buffer_;
- uint32 damage_buffer_sequence_id_;
- bool resize_ack_received_;
- gfx::Rect plugin_rect_;
- // Bitmap for crashed plugin. Lazily initialized, non-owning pointer.
- SkBitmap* sad_guest_;
- bool guest_crashed_;
- scoped_ptr<BrowserPluginHostMsg_ResizeGuest_Params> pending_resize_params_;
- // True if we have ever sent a NavigateGuest message to the embedder.
- bool navigate_src_sent_;
- bool auto_size_ack_pending_;
- int guest_process_id_;
- int guest_route_id_;
- std::string storage_partition_id_;
- bool persist_storage_;
- bool valid_partition_id_;
- int content_window_routing_id_;
- bool plugin_focused_;
- // Tracks the visibility of the browser plugin regardless of the whole
- // embedder RenderView's visibility.
- bool visible_;
-
- WebCursor cursor_;
-
- gfx::Size last_view_size_;
- bool size_changed_in_flight_;
- bool allocate_instance_id_sent_;
-
- // Each permission request item in the map is a pair of request id and
- // permission type.
- typedef std::map<int, std::pair<int, BrowserPluginPermissionType> >
- PendingPermissionRequests;
- PendingPermissionRequests pending_permission_requests_;
-
- typedef std::pair<int, base::WeakPtr<BrowserPlugin> >
- AliveV8PermissionRequestItem;
- std::map<int, AliveV8PermissionRequestItem*>
- alive_v8_permission_request_objects_;
-
- // BrowserPlugin outlives RenderViewImpl in Chrome Apps and so we need to
- // store the BrowserPlugin's BrowserPluginManager in a member variable to
- // avoid accessing the RenderViewImpl.
- scoped_refptr<BrowserPluginManager> browser_plugin_manager_;
-
- // Important: Do not add more history state here.
- // We strongly discourage storing additional history state (such as page IDs)
- // in the embedder process, at the risk of having incorrect information that
- // can lead to broken back/forward logic in apps.
- // It's also important that this state does not get modified by any logic in
- // the embedder process. It should only be updated in response to navigation
- // events in the guest. No assumptions should be made about how the index
- // will change after a navigation (e.g., for back, forward, or go), because
- // the changes are not always obvious. For example, there is a maximum
- // number of entries and earlier ones will automatically be pruned.
- int current_nav_entry_index_;
- int nav_entry_count_;
-
- // Used for HW compositing.
- bool compositing_enabled_;
- scoped_refptr<BrowserPluginCompositingHelper> compositing_helper_;
-
- // Weak factory used in v8 |MakeWeak| callback, since the v8 callback might
- // get called after BrowserPlugin has been destroyed.
- base::WeakPtrFactory<BrowserPlugin> weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(BrowserPlugin);
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_
« no previous file with comments | « content/public/renderer/content_renderer_client.h ('k') | content/renderer/browser_plugin/browser_plugin.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698