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

Side by Side Diff: components/plugins/renderer/plugin_placeholder.h

Issue 23606022: Move renderer plugin code into a new component. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move renderer plugin code into a new component - split off youtube plugin, and respond to other cod… Created 7 years, 3 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 unified diff | Download patch
OLDNEW
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 CHROME_RENDERER_PLUGINS_PLUGIN_PLACEHOLDER_H_ 5 #ifndef COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_
6 #define CHROME_RENDERER_PLUGINS_PLUGIN_PLACEHOLDER_H_ 6 #define COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_
7 7
8 #include "chrome/renderer/plugins/webview_plugin.h" 8 #include "components/plugins/renderer/webview_plugin.h"
9 #include "content/public/common/webplugininfo.h" 9 #include "content/public/common/webplugininfo.h"
10 #include "content/public/renderer/context_menu_client.h" 10 #include "content/public/renderer/context_menu_client.h"
11 #include "content/public/renderer/render_process_observer.h" 11 #include "content/public/renderer/render_process_observer.h"
12 #include "content/public/renderer/render_view_observer.h" 12 #include "content/public/renderer/render_view_observer.h"
13 #include "third_party/WebKit/public/web/WebPluginParams.h" 13 #include "third_party/WebKit/public/web/WebPluginParams.h"
14 #include "webkit/renderer/cpp_bound_class.h" 14 #include "webkit/renderer/cpp_bound_class.h"
15 15
16 struct ChromeViewHostMsg_GetPluginInfo_Status;
17
18 namespace content { 16 namespace content {
19 struct WebPluginInfo; 17 struct WebPluginInfo;
20 } 18 }
21 19
22 // Placeholders can be used if a plug-in is missing or not available 20 // Placeholders can be used if a plug-in is missing or not available
23 // (blocked or disabled). 21 // (blocked or disabled).
24 class PluginPlaceholder : public content::RenderViewObserver, 22 class PluginPlaceholder : public content::RenderViewObserver,
25 public content::RenderProcessObserver,
26 public webkit_glue::CppBoundClass, 23 public webkit_glue::CppBoundClass,
27 public WebViewPlugin::Delegate, 24 public WebViewPlugin::Delegate {
28 public content::ContextMenuClient {
29 public: 25 public:
30 // Creates a new WebViewPlugin with a MissingPlugin as a delegate.
31 static PluginPlaceholder* CreateMissingPlugin(
32 content::RenderView* render_view,
33 WebKit::WebFrame* frame,
34 const WebKit::WebPluginParams& params);
35
36 static PluginPlaceholder* CreateErrorPlugin(
37 content::RenderView* render_view,
38 const base::FilePath& plugin_path);
39
40 static PluginPlaceholder* CreateBlockedPlugin(
41 content::RenderView* render_view,
42 WebKit::WebFrame* frame,
43 const WebKit::WebPluginParams& params,
44 const content::WebPluginInfo& info,
45 const std::string& identifier,
46 const string16& name,
47 int resource_id,
48 const string16& message);
49
50 #if defined(ENABLE_MOBILE_YOUTUBE_PLUGIN)
51 // Placeholder for old style embedded youtube video on mobile device. For old
52 // style embedded youtube video, it has a url in the form of
53 // http://www.youtube.com/v/VIDEO_ID. This placeholder replaces the url with a
54 // simple html page and clicking the play image redirects the user to the
55 // mobile youtube app.
56 static PluginPlaceholder* CreateMobileYoutubePlugin(
57 content::RenderView* render_view,
58 WebKit::WebFrame* frame,
59 const WebKit::WebPluginParams& params);
60 #endif
61 26
62 WebViewPlugin* plugin() { return plugin_; } 27 WebViewPlugin* plugin() { return plugin_; }
63 28
64 void set_blocked_for_prerendering(bool blocked_for_prerendering) { 29 void set_blocked_for_prerendering(bool blocked_for_prerendering) {
65 is_blocked_for_prerendering_ = blocked_for_prerendering; 30 is_blocked_for_prerendering_ = blocked_for_prerendering;
66 } 31 }
67 32
68 void set_allow_loading(bool allow_loading) { allow_loading_ = allow_loading; } 33 void set_allow_loading(bool allow_loading) { allow_loading_ = allow_loading; }
69 34
70 void SetStatus(const ChromeViewHostMsg_GetPluginInfo_Status& status); 35 protected:
71
72 #if defined(ENABLE_PLUGIN_INSTALLATION)
73 int32 CreateRoutingId();
74 #endif
75
76 #if defined(ENABLE_MOBILE_YOUTUBE_PLUGIN)
77 // Whether this is a youtube url.
78 static bool IsYouTubeURL(const GURL& url, const std::string& mime_type);
79 #endif
80
81 private:
82 // |render_view| and |frame| are weak pointers. If either one is going away, 36 // |render_view| and |frame| are weak pointers. If either one is going away,
83 // our |plugin_| will be destroyed as well and will notify us. 37 // our |plugin_| will be destroyed as well and will notify us.
84 PluginPlaceholder(content::RenderView* render_view, 38 PluginPlaceholder(content::RenderView* render_view,
85 WebKit::WebFrame* frame, 39 WebKit::WebFrame* frame,
86 const WebKit::WebPluginParams& params, 40 const WebKit::WebPluginParams& params,
87 const std::string& html_data, 41 const std::string& html_data);
88 const string16& title);
89 42
90 virtual ~PluginPlaceholder(); 43 virtual ~PluginPlaceholder();
91 44
92 // WebViewPlugin::Delegate methods: 45 void OnLoadBlockedPlugins(const std::string& identifier);
93 virtual void BindWebFrame(WebKit::WebFrame* frame) OVERRIDE; 46 void OnSetIsPrerendering(bool is_prerendering);
94 virtual void WillDestroyPlugin() OVERRIDE;
95 virtual void ShowContextMenu(const WebKit::WebMouseEvent&) OVERRIDE;
96 47
97 // content::RenderViewObserver methods: 48 void SetMessage(const string16& message);
98 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 49 void SetPluginInfo(const content::WebPluginInfo& plugin_info);
99 50 const content::WebPluginInfo& GetPluginInfo() const;
100 // content::RenderProcessObserver methods: 51 void SetIdentifier(const std::string& identifier);
101 virtual void PluginListChanged() OVERRIDE; 52 WebKit::WebFrame* GetFrame();
102 53 const WebKit::WebPluginParams& GetPluginParams() const;
103 // content::ContextMenuClient methods: 54 bool LoadingAllowed() const { return allow_loading_; }
104 virtual void OnMenuAction(int request_id, unsigned action) OVERRIDE;
105 virtual void OnMenuClosed(int request_id) OVERRIDE;
106 55
107 // Replace this placeholder with a different plugin (which could be 56 // Replace this placeholder with a different plugin (which could be
108 // a placeholder again). 57 // a placeholder again).
109 void ReplacePlugin(WebKit::WebPlugin* new_plugin); 58 void ReplacePlugin(WebKit::WebPlugin* new_plugin);
110 59
111 // Hide this placeholder. 60 // Hide this placeholder.
112 void HidePlugin(); 61 void HidePlugin();
113 62
114 // Load the blocked plugin. 63 // Load the blocked plugin.
115 void LoadPlugin(); 64 void LoadPlugin();
116 65
66 // WebViewPlugin::Delegate method:
67 virtual void BindWebFrame(WebKit::WebFrame* frame) OVERRIDE;
68
69 private:
70 // WebViewPlugin::Delegate methods:
71 virtual void WillDestroyPlugin() OVERRIDE;
72 virtual void ShowContextMenu(const WebKit::WebMouseEvent&) OVERRIDE;
73
117 // Javascript callbacks: 74 // Javascript callbacks:
75 // All ignore arguments (which are, however, required by caller) and return
76 // nothing.
77
118 // Load the blocked plugin by calling LoadPlugin(). 78 // Load the blocked plugin by calling LoadPlugin().
119 // Takes no arguments, and returns nothing.
120 void LoadCallback(const webkit_glue::CppArgumentList& args, 79 void LoadCallback(const webkit_glue::CppArgumentList& args,
121 webkit_glue::CppVariant* result); 80 webkit_glue::CppVariant* result);
122 81
123 // Hide the blocked plugin by calling HidePlugin(). 82 // Hide the blocked plugin by calling HidePlugin().
124 // Takes no arguments, and returns nothing.
125 void HideCallback(const webkit_glue::CppArgumentList& args, 83 void HideCallback(const webkit_glue::CppArgumentList& args,
126 webkit_glue::CppVariant* result); 84 webkit_glue::CppVariant* result);
127 85
128 // Opens chrome://plugins in a new tab.
129 // Takes no arguments, and returns nothing.
130 void OpenAboutPluginsCallback(const webkit_glue::CppArgumentList& args,
131 webkit_glue::CppVariant* result);
132
133 void DidFinishLoadingCallback(const webkit_glue::CppArgumentList& args, 86 void DidFinishLoadingCallback(const webkit_glue::CppArgumentList& args,
134 webkit_glue::CppVariant* result); 87 webkit_glue::CppVariant* result);
135 88
136 void OnLoadBlockedPlugins(const std::string& identifier);
137 void OnSetIsPrerendering(bool is_prerendering);
138 #if defined(ENABLE_PLUGIN_INSTALLATION)
139 void OnDidNotFindMissingPlugin();
140 void OnFoundMissingPlugin(const string16& plugin_name);
141 void OnStartedDownloadingPlugin();
142 void OnFinishedDownloadingPlugin();
143 void OnErrorDownloadingPlugin(const std::string& error);
144 void OnCancelledDownloadingPlugin();
145 #endif
146
147 #if defined(ENABLE_MOBILE_YOUTUBE_PLUGIN)
148 // Check whether the url is valid.
149 static bool IsValidYouTubeVideo(const std::string& path);
150
151 // Opens a youtube app in the current tab.
152 void OpenYoutubeUrlCallback(const webkit_glue::CppArgumentList& args,
153 webkit_glue::CppVariant* result);
154 #endif
155
156 void SetMessage(const string16& message);
157 void UpdateMessage(); 89 void UpdateMessage();
158 90
159 WebKit::WebFrame* frame_; 91 WebKit::WebFrame* frame_;
160 WebKit::WebPluginParams plugin_params_; 92 WebKit::WebPluginParams plugin_params_;
161 WebViewPlugin* plugin_; 93 WebViewPlugin* plugin_;
162 94
163 content::WebPluginInfo plugin_info_; 95 content::WebPluginInfo plugin_info_;
164 96
165 string16 title_;
166 string16 message_; 97 string16 message_;
167 98
168 // We use a scoped_ptr so we can forward-declare the struct; it's defined in
169 // an IPC message file which can't be easily included in other header files.
170 scoped_ptr<ChromeViewHostMsg_GetPluginInfo_Status> status_;
171
172 // True iff the plugin was blocked because the page was being prerendered. 99 // True iff the plugin was blocked because the page was being prerendered.
173 // Plugin will automatically be loaded when the page is displayed. 100 // Plugin will automatically be loaded when the page is displayed.
174 bool is_blocked_for_prerendering_; 101 bool is_blocked_for_prerendering_;
175 bool allow_loading_; 102 bool allow_loading_;
176 103
177 #if defined(ENABLE_PLUGIN_INSTALLATION)
178 // |routing_id()| is the routing ID of our associated RenderView, but we have
179 // a separate routing ID for messages specific to this placeholder.
180 int32 placeholder_routing_id_;
181 #endif
182
183 bool hidden_; 104 bool hidden_;
184 bool has_host_;
185 bool finished_loading_; 105 bool finished_loading_;
186 string16 plugin_name_;
187 std::string identifier_; 106 std::string identifier_;
188 int context_menu_request_id_; // Nonzero when request pending.
189 107
190 DISALLOW_COPY_AND_ASSIGN(PluginPlaceholder); 108 DISALLOW_COPY_AND_ASSIGN(PluginPlaceholder);
191 }; 109 };
192 110
193 #endif // CHROME_RENDERER_PLUGINS_PLUGIN_PLACEHOLDER_H_ 111 #endif // COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698