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

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

Powered by Google App Engine
This is Rietveld 408576698