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

Side by Side Diff: chrome/renderer/extensions/extension_helper.cc

Issue 9456037: Adding run_at to chrome.tabs.executeScript/insertCss. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 8 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 #include "chrome/renderer/extensions/extension_helper.h" 5 #include "chrome/renderer/extensions/extension_helper.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_string_value_serializer.h" 10 #include "base/json/json_string_value_serializer.h"
11 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
14 #include "chrome/common/chrome_switches.h" 14 #include "chrome/common/chrome_switches.h"
15 #include "chrome/common/chrome_view_type.h" 15 #include "chrome/common/chrome_view_type.h"
16 #include "chrome/common/extensions/extension_messages.h" 16 #include "chrome/common/extensions/extension_messages.h"
17 #include "chrome/common/render_messages.h" 17 #include "chrome/common/render_messages.h"
18 #include "chrome/common/url_constants.h" 18 #include "chrome/common/url_constants.h"
19 #include "chrome/renderer/extensions/chrome_v8_context.h" 19 #include "chrome/renderer/extensions/chrome_v8_context.h"
20 #include "chrome/renderer/extensions/extension_dispatcher.h" 20 #include "chrome/renderer/extensions/extension_dispatcher.h"
21 #include "chrome/renderer/extensions/miscellaneous_bindings.h" 21 #include "chrome/renderer/extensions/miscellaneous_bindings.h"
22 #include "chrome/renderer/extensions/schema_generated_bindings.h" 22 #include "chrome/renderer/extensions/schema_generated_bindings.h"
23 #include "chrome/renderer/extensions/user_script_idle_scheduler.h" 23 #include "chrome/renderer/extensions/user_script_scheduler.h"
24 #include "chrome/renderer/extensions/user_script_slave.h" 24 #include "chrome/renderer/extensions/user_script_slave.h"
25 #include "content/public/renderer/render_view.h" 25 #include "content/public/renderer/render_view.h"
26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebConsoleMessage.h" 26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebConsoleMessage.h"
27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
28 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLReques t.h" 28 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLReques t.h"
29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScopedUserGesture. h" 29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScopedUserGesture. h"
30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
31 #include "webkit/glue/image_resource_fetcher.h" 31 #include "webkit/glue/image_resource_fetcher.h"
32 #include "webkit/glue/resource_fetcher.h" 32 #include "webkit/glue/resource_fetcher.h"
33 33
34 using extensions::MiscellaneousBindings; 34 using extensions::MiscellaneousBindings;
35 using extensions::SchemaGeneratedBindings; 35 using extensions::SchemaGeneratedBindings;
36 using WebKit::WebConsoleMessage; 36 using WebKit::WebConsoleMessage;
37 using WebKit::WebDataSource; 37 using WebKit::WebDataSource;
38 using WebKit::WebFrame; 38 using WebKit::WebFrame;
39 using WebKit::WebURLRequest; 39 using WebKit::WebURLRequest;
40 using WebKit::WebScopedUserGesture; 40 using WebKit::WebScopedUserGesture;
41 using WebKit::WebView; 41 using WebKit::WebView;
42 using webkit_glue::ImageResourceFetcher; 42 using webkit_glue::ImageResourceFetcher;
43 using webkit_glue::ResourceFetcher; 43 using webkit_glue::ResourceFetcher;
44 44
45 namespace { 45 namespace {
46 // Keeps a mapping from the frame pointer to a UserScriptIdleScheduler object. 46 // Keeps a mapping from the frame pointer to a UserScriptScheduler object.
47 // We store this mapping per process, because a frame can jump from one 47 // We store this mapping per process, because a frame can jump from one
48 // document to another with adoptNode, and so having the object be a 48 // document to another with adoptNode, and so having the object be a
49 // RenderViewObserver means it might miss some notifications after it moves. 49 // RenderViewObserver means it might miss some notifications after it moves.
50 typedef std::map<WebFrame*, UserScriptIdleScheduler*> SchedulerMap; 50 typedef std::map<WebFrame*, UserScriptScheduler*> SchedulerMap;
51 static base::LazyInstance<SchedulerMap> g_schedulers = 51 static base::LazyInstance<SchedulerMap> g_schedulers =
52 LAZY_INSTANCE_INITIALIZER; 52 LAZY_INSTANCE_INITIALIZER;
53 } 53 }
54 54
55 ExtensionHelper::ExtensionHelper(content::RenderView* render_view, 55 ExtensionHelper::ExtensionHelper(content::RenderView* render_view,
56 ExtensionDispatcher* extension_dispatcher) 56 ExtensionDispatcher* extension_dispatcher)
57 : content::RenderViewObserver(render_view), 57 : content::RenderViewObserver(render_view),
58 content::RenderViewObserverTracker<ExtensionHelper>(render_view), 58 content::RenderViewObserverTracker<ExtensionHelper>(render_view),
59 extension_dispatcher_(extension_dispatcher), 59 extension_dispatcher_(extension_dispatcher),
60 pending_app_icon_requests_(0), 60 pending_app_icon_requests_(0),
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 140
141 void ExtensionHelper::DidFinishLoad(WebKit::WebFrame* frame) { 141 void ExtensionHelper::DidFinishLoad(WebKit::WebFrame* frame) {
142 SchedulerMap::iterator i = g_schedulers.Get().find(frame); 142 SchedulerMap::iterator i = g_schedulers.Get().find(frame);
143 if (i != g_schedulers.Get().end()) 143 if (i != g_schedulers.Get().end())
144 i->second->DidFinishLoad(); 144 i->second->DidFinishLoad();
145 } 145 }
146 146
147 void ExtensionHelper::DidCreateDocumentElement(WebFrame* frame) { 147 void ExtensionHelper::DidCreateDocumentElement(WebFrame* frame) {
148 extension_dispatcher_->user_script_slave()->InjectScripts( 148 extension_dispatcher_->user_script_slave()->InjectScripts(
149 frame, UserScript::DOCUMENT_START); 149 frame, UserScript::DOCUMENT_START);
150 SchedulerMap::iterator i = g_schedulers.Get().find(frame);
151 if (i != g_schedulers.Get().end())
152 i->second->DidCreateDocumentElement();
150 } 153 }
151 154
152 void ExtensionHelper::DidStartProvisionalLoad(WebKit::WebFrame* frame) { 155 void ExtensionHelper::DidStartProvisionalLoad(WebKit::WebFrame* frame) {
153 SchedulerMap::iterator i = g_schedulers.Get().find(frame); 156 SchedulerMap::iterator i = g_schedulers.Get().find(frame);
154 if (i != g_schedulers.Get().end()) 157 if (i != g_schedulers.Get().end())
155 i->second->DidStartProvisionalLoad(); 158 i->second->DidStartProvisionalLoad();
156 } 159 }
157 160
158 void ExtensionHelper::FrameDetached(WebFrame* frame) { 161 void ExtensionHelper::FrameDetached(WebFrame* frame) {
159 // This could be called before DidCreateDataSource, in which case the frame 162 // This could be called before DidCreateDataSource, in which case the frame
(...skipping 12 matching lines...) Expand all
172 if (!frame->parent()) { 175 if (!frame->parent()) {
173 app_icon_fetchers_.clear(); 176 app_icon_fetchers_.clear();
174 app_definition_fetcher_.reset(NULL); 177 app_definition_fetcher_.reset(NULL);
175 } 178 }
176 179
177 // Check first if we created a scheduler for the frame, since this function 180 // Check first if we created a scheduler for the frame, since this function
178 // gets called for navigations within the document. 181 // gets called for navigations within the document.
179 if (g_schedulers.Get().count(frame)) 182 if (g_schedulers.Get().count(frame))
180 return; 183 return;
181 184
182 g_schedulers.Get()[frame] = new UserScriptIdleScheduler( 185 g_schedulers.Get()[frame] = new UserScriptScheduler(
183 frame, extension_dispatcher_); 186 frame, extension_dispatcher_);
184 } 187 }
185 188
186 void ExtensionHelper::OnExtensionResponse(int request_id, 189 void ExtensionHelper::OnExtensionResponse(int request_id,
187 bool success, 190 bool success,
188 const std::string& response, 191 const std::string& response,
189 const std::string& error) { 192 const std::string& error) {
190 std::string extension_id; 193 std::string extension_id;
191 SchemaGeneratedBindings::HandleResponse( 194 SchemaGeneratedBindings::HandleResponse(
192 extension_dispatcher_->v8_context_set(), request_id, success, 195 extension_dispatcher_->v8_context_set(), request_id, success,
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 routing_id(), *pending_app_info_)); 359 routing_id(), *pending_app_info_));
357 pending_app_info_.reset(NULL); 360 pending_app_info_.reset(NULL);
358 } 361 }
359 362
360 void ExtensionHelper::AddErrorToRootConsole(const string16& message) { 363 void ExtensionHelper::AddErrorToRootConsole(const string16& message) {
361 if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 364 if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
362 render_view()->GetWebView()->mainFrame()->addMessageToConsole( 365 render_view()->GetWebView()->mainFrame()->addMessageToConsole(
363 WebConsoleMessage(WebConsoleMessage::LevelError, message)); 366 WebConsoleMessage(WebConsoleMessage::LevelError, message));
364 } 367 }
365 } 368 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698