OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "chrome/renderer/extensions/extension_helper.h" | 5 #include "chrome/renderer/extensions/extension_helper.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
11 #include "chrome/common/chrome_switches.h" | 11 #include "chrome/common/chrome_switches.h" |
12 #include "chrome/common/extensions/extension_messages.h" | 12 #include "chrome/common/extensions/extension_messages.h" |
| 13 #include "chrome/common/render_messages.h" |
13 #include "chrome/common/url_constants.h" | 14 #include "chrome/common/url_constants.h" |
14 #include "chrome/renderer/extensions/extension_dispatcher.h" | 15 #include "chrome/renderer/extensions/extension_dispatcher.h" |
15 #include "chrome/renderer/extensions/extension_process_bindings.h" | 16 #include "chrome/renderer/extensions/extension_process_bindings.h" |
16 #include "chrome/renderer/extensions/renderer_extension_bindings.h" | 17 #include "chrome/renderer/extensions/renderer_extension_bindings.h" |
17 #include "chrome/renderer/extensions/user_script_idle_scheduler.h" | 18 #include "chrome/renderer/extensions/user_script_idle_scheduler.h" |
18 #include "chrome/renderer/extensions/user_script_slave.h" | 19 #include "chrome/renderer/extensions/user_script_slave.h" |
19 #include "content/common/json_value_serializer.h" | 20 #include "content/common/json_value_serializer.h" |
20 #include "content/renderer/render_view.h" | 21 #include "content/renderer/render_view.h" |
21 #include "webkit/glue/image_resource_fetcher.h" | 22 #include "webkit/glue/image_resource_fetcher.h" |
22 #include "webkit/glue/resource_fetcher.h" | 23 #include "webkit/glue/resource_fetcher.h" |
(...skipping 17 matching lines...) Expand all Loading... |
40 // RenderViewObserver means it might miss some notifications after it moves. | 41 // RenderViewObserver means it might miss some notifications after it moves. |
41 typedef std::map<WebFrame*, UserScriptIdleScheduler*> SchedulerMap; | 42 typedef std::map<WebFrame*, UserScriptIdleScheduler*> SchedulerMap; |
42 static base::LazyInstance<SchedulerMap> g_schedulers(base::LINKER_INITIALIZED); | 43 static base::LazyInstance<SchedulerMap> g_schedulers(base::LINKER_INITIALIZED); |
43 } | 44 } |
44 | 45 |
45 ExtensionHelper::ExtensionHelper(RenderView* render_view, | 46 ExtensionHelper::ExtensionHelper(RenderView* render_view, |
46 ExtensionDispatcher* extension_dispatcher) | 47 ExtensionDispatcher* extension_dispatcher) |
47 : RenderViewObserver(render_view), | 48 : RenderViewObserver(render_view), |
48 RenderViewObserverTracker<ExtensionHelper>(render_view), | 49 RenderViewObserverTracker<ExtensionHelper>(render_view), |
49 extension_dispatcher_(extension_dispatcher), | 50 extension_dispatcher_(extension_dispatcher), |
50 pending_app_icon_requests_(0) { | 51 pending_app_icon_requests_(0), |
| 52 view_type_(ViewType::INVALID), |
| 53 browser_window_id_(-1) { |
51 } | 54 } |
52 | 55 |
53 ExtensionHelper::~ExtensionHelper() { | 56 ExtensionHelper::~ExtensionHelper() { |
54 } | 57 } |
55 | 58 |
56 bool ExtensionHelper::InstallWebApplicationUsingDefinitionFile( | 59 bool ExtensionHelper::InstallWebApplicationUsingDefinitionFile( |
57 WebFrame* frame, string16* error) { | 60 WebFrame* frame, string16* error) { |
58 // There is an issue of drive-by installs with the below implementation. A web | 61 // There is an issue of drive-by installs with the below implementation. A web |
59 // site could force a user to install an app by timing the dialog to come up | 62 // site could force a user to install an app by timing the dialog to come up |
60 // just before the user clicks. | 63 // just before the user clicks. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 return true; | 102 return true; |
100 } | 103 } |
101 | 104 |
102 bool ExtensionHelper::OnMessageReceived(const IPC::Message& message) { | 105 bool ExtensionHelper::OnMessageReceived(const IPC::Message& message) { |
103 bool handled = true; | 106 bool handled = true; |
104 IPC_BEGIN_MESSAGE_MAP(ExtensionHelper, message) | 107 IPC_BEGIN_MESSAGE_MAP(ExtensionHelper, message) |
105 IPC_MESSAGE_HANDLER(ExtensionMsg_Response, OnExtensionResponse) | 108 IPC_MESSAGE_HANDLER(ExtensionMsg_Response, OnExtensionResponse) |
106 IPC_MESSAGE_HANDLER(ExtensionMsg_MessageInvoke, OnExtensionMessageInvoke) | 109 IPC_MESSAGE_HANDLER(ExtensionMsg_MessageInvoke, OnExtensionMessageInvoke) |
107 IPC_MESSAGE_HANDLER(ExtensionMsg_ExecuteCode, OnExecuteCode) | 110 IPC_MESSAGE_HANDLER(ExtensionMsg_ExecuteCode, OnExecuteCode) |
108 IPC_MESSAGE_HANDLER(ExtensionMsg_GetApplicationInfo, OnGetApplicationInfo) | 111 IPC_MESSAGE_HANDLER(ExtensionMsg_GetApplicationInfo, OnGetApplicationInfo) |
| 112 IPC_MESSAGE_HANDLER(ViewMsg_UpdateBrowserWindowId, OnUpdateBrowserWindowId) |
| 113 IPC_MESSAGE_HANDLER(ViewMsg_NotifyRenderViewType, OnNotifyRendererViewType) |
109 IPC_MESSAGE_UNHANDLED(handled = false) | 114 IPC_MESSAGE_UNHANDLED(handled = false) |
110 IPC_END_MESSAGE_MAP() | 115 IPC_END_MESSAGE_MAP() |
111 return handled; | 116 return handled; |
112 } | 117 } |
113 | 118 |
114 void ExtensionHelper::DidFinishDocumentLoad(WebFrame* frame) { | 119 void ExtensionHelper::DidFinishDocumentLoad(WebFrame* frame) { |
115 extension_dispatcher_->user_script_slave()->InjectScripts( | 120 extension_dispatcher_->user_script_slave()->InjectScripts( |
116 frame, UserScript::DOCUMENT_END); | 121 frame, UserScript::DOCUMENT_END); |
117 | 122 |
118 SchedulerMap::iterator i = g_schedulers.Get().find(frame); | 123 SchedulerMap::iterator i = g_schedulers.Get().find(frame); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 if (app_info.icons[i].url.SchemeIs(chrome::kDataScheme)) { | 219 if (app_info.icons[i].url.SchemeIs(chrome::kDataScheme)) { |
215 app_info.icons.erase(app_info.icons.begin() + i); | 220 app_info.icons.erase(app_info.icons.begin() + i); |
216 --i; | 221 --i; |
217 } | 222 } |
218 } | 223 } |
219 | 224 |
220 Send(new ExtensionHostMsg_DidGetApplicationInfo( | 225 Send(new ExtensionHostMsg_DidGetApplicationInfo( |
221 routing_id(), page_id, app_info)); | 226 routing_id(), page_id, app_info)); |
222 } | 227 } |
223 | 228 |
| 229 void ExtensionHelper::OnNotifyRendererViewType(ViewType::Type type) { |
| 230 view_type_ = type; |
| 231 } |
| 232 |
| 233 void ExtensionHelper::OnUpdateBrowserWindowId(int window_id) { |
| 234 browser_window_id_ = window_id; |
| 235 } |
| 236 |
224 void ExtensionHelper::DidDownloadApplicationDefinition( | 237 void ExtensionHelper::DidDownloadApplicationDefinition( |
225 const WebKit::WebURLResponse& response, | 238 const WebKit::WebURLResponse& response, |
226 const std::string& data) { | 239 const std::string& data) { |
227 scoped_ptr<WebApplicationInfo> app_info( | 240 scoped_ptr<WebApplicationInfo> app_info( |
228 pending_app_info_.release()); | 241 pending_app_info_.release()); |
229 | 242 |
230 JSONStringValueSerializer serializer(data); | 243 JSONStringValueSerializer serializer(data); |
231 int error_code = 0; | 244 int error_code = 0; |
232 std::string error_message; | 245 std::string error_message; |
233 scoped_ptr<Value> result(serializer.Deserialize(&error_code, &error_message)); | 246 scoped_ptr<Value> result(serializer.Deserialize(&error_code, &error_message)); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 routing_id(), *pending_app_info_)); | 325 routing_id(), *pending_app_info_)); |
313 pending_app_info_.reset(NULL); | 326 pending_app_info_.reset(NULL); |
314 } | 327 } |
315 | 328 |
316 void ExtensionHelper::AddErrorToRootConsole(const string16& message) { | 329 void ExtensionHelper::AddErrorToRootConsole(const string16& message) { |
317 if (render_view()->webview() && render_view()->webview()->mainFrame()) { | 330 if (render_view()->webview() && render_view()->webview()->mainFrame()) { |
318 render_view()->webview()->mainFrame()->addMessageToConsole( | 331 render_view()->webview()->mainFrame()->addMessageToConsole( |
319 WebConsoleMessage(WebConsoleMessage::LevelError, message)); | 332 WebConsoleMessage(WebConsoleMessage::LevelError, message)); |
320 } | 333 } |
321 } | 334 } |
OLD | NEW |