| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_ | 5 #ifndef CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_ |
| 6 #define CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_ | 6 #define CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_ |
| 7 | 7 |
| 8 #include <list> | 8 #include <list> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/callback.h" | 13 #include "base/callback.h" |
| 14 #include "base/compiler_specific.h" | 14 #include "base/compiler_specific.h" |
| 15 #include "base/memory/ref_counted.h" | 15 #include "base/memory/ref_counted.h" |
| 16 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/scoped_ptr.h" |
| 17 #include "base/memory/weak_ptr.h" | 17 #include "base/memory/weak_ptr.h" |
| 18 #include "base/strings/string16.h" | 18 #include "base/strings/string16.h" |
| 19 #include "cc/layers/content_layer_client.h" | 19 #include "cc/layers/content_layer_client.h" |
| 20 #include "cc/layers/layer.h" | 20 #include "cc/layers/layer.h" |
| 21 #include "cc/layers/texture_layer_client.h" | 21 #include "cc/layers/texture_layer_client.h" |
| 22 #include "content/common/content_export.h" | 22 #include "content/common/content_export.h" |
| 23 #include "content/public/renderer/pepper_plugin_instance.h" | 23 #include "content/public/renderer/pepper_plugin_instance.h" |
| 24 #include "content/public/renderer/plugin_instance_throttler.h" |
| 24 #include "content/public/renderer/render_frame.h" | 25 #include "content/public/renderer/render_frame.h" |
| 25 #include "content/public/renderer/render_frame_observer.h" | 26 #include "content/public/renderer/render_frame_observer.h" |
| 26 #include "content/renderer/mouse_lock_dispatcher.h" | 27 #include "content/renderer/mouse_lock_dispatcher.h" |
| 27 #include "gin/handle.h" | 28 #include "gin/handle.h" |
| 28 #include "ppapi/c/dev/pp_cursor_type_dev.h" | 29 #include "ppapi/c/dev/pp_cursor_type_dev.h" |
| 29 #include "ppapi/c/dev/ppp_printing_dev.h" | 30 #include "ppapi/c/dev/ppp_printing_dev.h" |
| 30 #include "ppapi/c/dev/ppp_selection_dev.h" | 31 #include "ppapi/c/dev/ppp_selection_dev.h" |
| 31 #include "ppapi/c/dev/ppp_text_input_dev.h" | 32 #include "ppapi/c/dev/ppp_text_input_dev.h" |
| 32 #include "ppapi/c/dev/ppp_zoom_dev.h" | 33 #include "ppapi/c/dev/ppp_zoom_dev.h" |
| 33 #include "ppapi/c/pp_completion_callback.h" | 34 #include "ppapi/c/pp_completion_callback.h" |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 class ScopedPPVar; | 98 class ScopedPPVar; |
| 98 } | 99 } |
| 99 | 100 |
| 100 namespace content { | 101 namespace content { |
| 101 | 102 |
| 102 class ContentDecryptorDelegate; | 103 class ContentDecryptorDelegate; |
| 103 class FullscreenContainer; | 104 class FullscreenContainer; |
| 104 class MessageChannel; | 105 class MessageChannel; |
| 105 class PepperCompositorHost; | 106 class PepperCompositorHost; |
| 106 class PepperGraphics2DHost; | 107 class PepperGraphics2DHost; |
| 107 class PepperPluginInstanceThrottler; | 108 class PluginInstanceThrottlerImpl; |
| 108 class PluginModule; | 109 class PluginModule; |
| 109 class PluginObject; | 110 class PluginObject; |
| 110 class PPB_Graphics3D_Impl; | 111 class PPB_Graphics3D_Impl; |
| 111 class PPB_ImageData_Impl; | 112 class PPB_ImageData_Impl; |
| 112 class PPB_URLLoader_Impl; | 113 class PPB_URLLoader_Impl; |
| 113 class RenderFrameImpl; | 114 class RenderFrameImpl; |
| 114 class RenderViewImpl; | 115 class RenderViewImpl; |
| 115 | 116 |
| 116 // Represents one time a plugin appears on one web page. | 117 // Represents one time a plugin appears on one web page. |
| 117 // | 118 // |
| 118 // Note: to get from a PP_Instance to a PepperPluginInstance*, use the | 119 // Note: to get from a PP_Instance to a PepperPluginInstance*, use the |
| 119 // ResourceTracker. | 120 // ResourceTracker. |
| 120 class CONTENT_EXPORT PepperPluginInstanceImpl | 121 class CONTENT_EXPORT PepperPluginInstanceImpl |
| 121 : public base::RefCounted<PepperPluginInstanceImpl>, | 122 : public base::RefCounted<PepperPluginInstanceImpl>, |
| 122 public NON_EXPORTED_BASE(PepperPluginInstance), | 123 public NON_EXPORTED_BASE(PepperPluginInstance), |
| 123 public ppapi::PPB_Instance_Shared, | 124 public ppapi::PPB_Instance_Shared, |
| 124 public NON_EXPORTED_BASE(cc::TextureLayerClient), | 125 public NON_EXPORTED_BASE(cc::TextureLayerClient), |
| 125 public RenderFrameObserver { | 126 public RenderFrameObserver, |
| 127 public NON_EXPORTED_BASE(PluginInstanceThrottler::Observer) { |
| 126 public: | 128 public: |
| 127 // Create and return a PepperPluginInstanceImpl object which supports the most | 129 // Create and return a PepperPluginInstanceImpl object which supports the most |
| 128 // recent version of PPP_Instance possible by querying the given | 130 // recent version of PPP_Instance possible by querying the given |
| 129 // get_plugin_interface function. If the plugin does not support any valid | 131 // get_plugin_interface function. If the plugin does not support any valid |
| 130 // PPP_Instance interface, returns NULL. | 132 // PPP_Instance interface, returns NULL. |
| 131 static PepperPluginInstanceImpl* Create(RenderFrameImpl* render_frame, | 133 static PepperPluginInstanceImpl* Create(RenderFrameImpl* render_frame, |
| 132 PluginModule* module, | 134 PluginModule* module, |
| 133 blink::WebPluginContainer* container, | 135 blink::WebPluginContainer* container, |
| 134 const GURL& plugin_url); | 136 const GURL& plugin_url); |
| 135 RenderFrameImpl* render_frame() const { return render_frame_; } | 137 RenderFrameImpl* render_frame() const { return render_frame_; } |
| 136 PluginModule* module() const { return module_.get(); } | 138 PluginModule* module() const { return module_.get(); } |
| 137 | 139 |
| 138 blink::WebPluginContainer* container() const { return container_; } | 140 blink::WebPluginContainer* container() const { return container_; } |
| 139 | 141 |
| 140 PepperPluginInstanceThrottler* throttler() const { return throttler_.get(); } | 142 PluginInstanceThrottlerImpl* throttler() const { return throttler_.get(); } |
| 141 | 143 |
| 142 // Returns the PP_Instance uniquely identifying this instance. Guaranteed | 144 // Returns the PP_Instance uniquely identifying this instance. Guaranteed |
| 143 // nonzero. | 145 // nonzero. |
| 144 PP_Instance pp_instance() const { return pp_instance_; } | 146 PP_Instance pp_instance() const { return pp_instance_; } |
| 145 | 147 |
| 146 ppapi::thunk::ResourceCreationAPI& resource_creation() { | 148 ppapi::thunk::ResourceCreationAPI& resource_creation() { |
| 147 return *resource_creation_.get(); | 149 return *resource_creation_.get(); |
| 148 } | 150 } |
| 149 | 151 |
| 150 MessageChannel* message_channel() { return message_channel_; } | 152 MessageChannel* message_channel() { return message_channel_; } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 void InstanceCrashed(); | 195 void InstanceCrashed(); |
| 194 | 196 |
| 195 // PPB_Instance and PPB_Instance_Private implementation. | 197 // PPB_Instance and PPB_Instance_Private implementation. |
| 196 bool full_frame() const { return full_frame_; } | 198 bool full_frame() const { return full_frame_; } |
| 197 const ppapi::ViewData& view_data() const { return view_data_; } | 199 const ppapi::ViewData& view_data() const { return view_data_; } |
| 198 | 200 |
| 199 // PPP_Instance and PPP_Instance_Private. | 201 // PPP_Instance and PPP_Instance_Private. |
| 200 bool Initialize(const std::vector<std::string>& arg_names, | 202 bool Initialize(const std::vector<std::string>& arg_names, |
| 201 const std::vector<std::string>& arg_values, | 203 const std::vector<std::string>& arg_values, |
| 202 bool full_frame, | 204 bool full_frame, |
| 203 RenderFrame::PluginPowerSaverMode power_saver_mode); | 205 scoped_ptr<PluginInstanceThrottlerImpl> throttler); |
| 204 bool HandleDocumentLoad(const blink::WebURLResponse& response); | 206 bool HandleDocumentLoad(const blink::WebURLResponse& response); |
| 205 bool HandleInputEvent(const blink::WebInputEvent& event, | 207 bool HandleInputEvent(const blink::WebInputEvent& event, |
| 206 blink::WebCursorInfo* cursor_info); | 208 blink::WebCursorInfo* cursor_info); |
| 207 PP_Var GetInstanceObject(v8::Isolate* isolate); | 209 PP_Var GetInstanceObject(v8::Isolate* isolate); |
| 208 void ViewChanged(const gfx::Rect& position, | 210 void ViewChanged(const gfx::Rect& position, |
| 209 const gfx::Rect& clip, | 211 const gfx::Rect& clip, |
| 210 const std::vector<gfx::Rect>& cut_outs_rects); | 212 const std::vector<gfx::Rect>& cut_outs_rects); |
| 211 | 213 |
| 212 // Handlers for composition events. | 214 // Handlers for composition events. |
| 213 bool HandleCompositionStart(const base::string16& text); | 215 bool HandleCompositionStart(const base::string16& text); |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 | 533 |
| 532 // cc::TextureLayerClient implementation. | 534 // cc::TextureLayerClient implementation. |
| 533 bool PrepareTextureMailbox( | 535 bool PrepareTextureMailbox( |
| 534 cc::TextureMailbox* mailbox, | 536 cc::TextureMailbox* mailbox, |
| 535 scoped_ptr<cc::SingleReleaseCallback>* release_callback, | 537 scoped_ptr<cc::SingleReleaseCallback>* release_callback, |
| 536 bool use_shared_memory) override; | 538 bool use_shared_memory) override; |
| 537 | 539 |
| 538 // RenderFrameObserver | 540 // RenderFrameObserver |
| 539 void OnDestruct() override; | 541 void OnDestruct() override; |
| 540 | 542 |
| 543 // PluginInstanceThrottler::Observer |
| 544 void OnThrottleStateChange() override; |
| 545 |
| 541 void AddLatencyInfo(const std::vector<ui::LatencyInfo>& latency_info); | 546 void AddLatencyInfo(const std::vector<ui::LatencyInfo>& latency_info); |
| 542 | 547 |
| 543 private: | 548 private: |
| 544 friend class base::RefCounted<PepperPluginInstanceImpl>; | 549 friend class base::RefCounted<PepperPluginInstanceImpl>; |
| 545 friend class PpapiPluginInstanceTest; | 550 friend class PpapiPluginInstanceTest; |
| 546 friend class PpapiUnittest; | 551 friend class PpapiUnittest; |
| 547 | 552 |
| 548 // Delete should be called by the WebPlugin before this destructor. | 553 // Delete should be called by the WebPlugin before this destructor. |
| 549 ~PepperPluginInstanceImpl() override; | 554 ~PepperPluginInstanceImpl() override; |
| 550 | 555 |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 711 scoped_ptr<blink::WebLayer> web_layer_; | 716 scoped_ptr<blink::WebLayer> web_layer_; |
| 712 bool layer_bound_to_fullscreen_; | 717 bool layer_bound_to_fullscreen_; |
| 713 bool layer_is_hardware_; | 718 bool layer_is_hardware_; |
| 714 | 719 |
| 715 // Plugin URL. | 720 // Plugin URL. |
| 716 GURL plugin_url_; | 721 GURL plugin_url_; |
| 717 | 722 |
| 718 // Used to track Flash-specific metrics. | 723 // Used to track Flash-specific metrics. |
| 719 bool is_flash_plugin_; | 724 bool is_flash_plugin_; |
| 720 | 725 |
| 726 // Set to true the first time the plugin is clicked. Used to collect metrics. |
| 727 bool has_been_clicked_; |
| 728 |
| 721 // Used to track if JavaScript has ever been used for this plugin instance. | 729 // Used to track if JavaScript has ever been used for this plugin instance. |
| 722 bool javascript_used_; | 730 bool javascript_used_; |
| 723 | 731 |
| 724 // Responsible for turning on throttling if Power Saver is on. | 732 // Responsible for turning on throttling if Power Saver is on. |
| 725 scoped_ptr<PepperPluginInstanceThrottler> throttler_; | 733 scoped_ptr<PluginInstanceThrottlerImpl> throttler_; |
| 726 | 734 |
| 727 // Indicates whether this is a full frame instance, which means it represents | 735 // Indicates whether this is a full frame instance, which means it represents |
| 728 // an entire document rather than an embed tag. | 736 // an entire document rather than an embed tag. |
| 729 bool full_frame_; | 737 bool full_frame_; |
| 730 | 738 |
| 731 // Stores the current state of the plugin view. | 739 // Stores the current state of the plugin view. |
| 732 ppapi::ViewData view_data_; | 740 ppapi::ViewData view_data_; |
| 733 // The last state sent to the plugin. It is only valid after | 741 // The last state sent to the plugin. It is only valid after |
| 734 // |sent_initial_did_change_view_| is set to true. | 742 // |sent_initial_did_change_view_| is set to true. |
| 735 ppapi::ViewData last_sent_view_data_; | 743 ppapi::ViewData last_sent_view_data_; |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 922 // view change events. | 930 // view change events. |
| 923 base::WeakPtrFactory<PepperPluginInstanceImpl> view_change_weak_ptr_factory_; | 931 base::WeakPtrFactory<PepperPluginInstanceImpl> view_change_weak_ptr_factory_; |
| 924 base::WeakPtrFactory<PepperPluginInstanceImpl> weak_factory_; | 932 base::WeakPtrFactory<PepperPluginInstanceImpl> weak_factory_; |
| 925 | 933 |
| 926 DISALLOW_COPY_AND_ASSIGN(PepperPluginInstanceImpl); | 934 DISALLOW_COPY_AND_ASSIGN(PepperPluginInstanceImpl); |
| 927 }; | 935 }; |
| 928 | 936 |
| 929 } // namespace content | 937 } // namespace content |
| 930 | 938 |
| 931 #endif // CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_ | 939 #endif // CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_INSTANCE_IMPL_H_ |
| OLD | NEW |