diff options
-rw-r--r-- | chrome/renderer/extensions/extension_helper.cc | 21 | ||||
-rw-r--r-- | chrome/renderer/extensions/extension_helper.h | 7 | ||||
-rw-r--r-- | chrome/renderer/user_script_idle_scheduler.cc | 164 | ||||
-rw-r--r-- | chrome/renderer/user_script_idle_scheduler.h | 48 | ||||
-rw-r--r-- | content/renderer/navigation_state.cc | 12 | ||||
-rw-r--r-- | content/renderer/navigation_state.h | 9 | ||||
-rw-r--r-- | content/renderer/render_view.cc | 115 | ||||
-rw-r--r-- | content/renderer/render_view.h | 21 | ||||
-rw-r--r-- | content/renderer/render_view_observer.h | 3 |
9 files changed, 213 insertions, 187 deletions
diff --git a/chrome/renderer/extensions/extension_helper.cc b/chrome/renderer/extensions/extension_helper.cc index d089955..7e01c40 100644 --- a/chrome/renderer/extensions/extension_helper.cc +++ b/chrome/renderer/extensions/extension_helper.cc @@ -7,12 +7,17 @@ #include "chrome/common/extensions/extension_messages.h" #include "chrome/renderer/extensions/extension_process_bindings.h" #include "chrome/renderer/extensions/renderer_extension_bindings.h" +#include "chrome/renderer/user_script_idle_scheduler.h" + +using WebKit::WebFrame; +using WebKit::WebDataSource; ExtensionHelper::ExtensionHelper(RenderView* render_view) : RenderViewObserver(render_view) { } ExtensionHelper::~ExtensionHelper() { + DCHECK(user_script_idle_schedulers_.empty()); } bool ExtensionHelper::OnMessageReceived(const IPC::Message& message) { @@ -25,6 +30,22 @@ bool ExtensionHelper::OnMessageReceived(const IPC::Message& message) { return handled; } +void ExtensionHelper::FrameDetached(WebFrame* frame) { + // This could be called before DidCreateDataSource, in which case the frame + // won't be in the set. + user_script_idle_schedulers_.erase(frame); +} + +void ExtensionHelper::DidCreateDataSource(WebFrame* frame, WebDataSource* ds) { + // Check first if we created a scheduler for the frame, since this function + // gets called for navigations within the document. + if (user_script_idle_schedulers_.count(frame)) + return; + + new UserScriptIdleScheduler(render_view(), frame); + user_script_idle_schedulers_.insert(frame); +} + void ExtensionHelper::OnExtensionResponse(int request_id, bool success, const std::string& response, diff --git a/chrome/renderer/extensions/extension_helper.h b/chrome/renderer/extensions/extension_helper.h index d18ad48..f7fb438 100644 --- a/chrome/renderer/extensions/extension_helper.h +++ b/chrome/renderer/extensions/extension_helper.h @@ -6,6 +6,8 @@ #define CHROME_RENDERER_EXTENSIONS_EXTENSION_HELPER_H_ #pragma once +#include <set> + #include "content/renderer/render_view_observer.h" class GURL; @@ -20,6 +22,9 @@ class ExtensionHelper : public RenderViewObserver { private: // RenderViewObserver implementation. virtual bool OnMessageReceived(const IPC::Message& message); + virtual void FrameDetached(WebKit::WebFrame* frame); + virtual void DidCreateDataSource(WebKit::WebFrame* frame, + WebKit::WebDataSource* ds); void OnExtensionResponse(int request_id, bool success, const std::string& response, @@ -29,6 +34,8 @@ class ExtensionHelper : public RenderViewObserver { const ListValue& args, const GURL& event_url); + // Keeps tracks of the frames that we created a scheduler for. + std::set<WebKit::WebFrame*> user_script_idle_schedulers_; DISALLOW_COPY_AND_ASSIGN(ExtensionHelper); }; diff --git a/chrome/renderer/user_script_idle_scheduler.cc b/chrome/renderer/user_script_idle_scheduler.cc index 38a81f6..7b4243f 100644 --- a/chrome/renderer/user_script_idle_scheduler.cc +++ b/chrome/renderer/user_script_idle_scheduler.cc @@ -5,7 +5,15 @@ #include "chrome/renderer/user_script_idle_scheduler.h" #include "base/message_loop.h" +#include "chrome/common/extensions/extension_messages.h" +#include "chrome/renderer/extension_groups.h" +#include "chrome/renderer/extensions/extension_dispatcher.h" +#include "chrome/renderer/render_thread.h" +#include "chrome/renderer/user_script_slave.h" #include "content/renderer/render_view.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" namespace { // The length of time to wait after the DOM is complete to try and run user @@ -13,43 +21,167 @@ namespace { const int kUserScriptIdleTimeoutMs = 200; } -UserScriptIdleScheduler::UserScriptIdleScheduler(RenderView* view, - WebKit::WebFrame* frame) - : ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), view_(view), - frame_(frame), has_run_(false) { +using WebKit::WebFrame; +using WebKit::WebString; +using WebKit::WebView; + +UserScriptIdleScheduler::UserScriptIdleScheduler(RenderView* render_view, + WebFrame* frame) + : RenderViewObserver(render_view), + ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), + frame_(frame), + has_run_(false) { } UserScriptIdleScheduler::~UserScriptIdleScheduler() { } -void UserScriptIdleScheduler::DidFinishDocumentLoad() { +bool UserScriptIdleScheduler::OnMessageReceived(const IPC::Message& message) { + if (message.type() != ExtensionMsg_ExecuteCode::ID) + return false; + + // chrome.tabs.executeScript() only supports execution in either the top frame + // or all frames. We handle both cases in the top frame. + WebFrame* main_frame = GetMainFrame(); + if (main_frame && main_frame != frame_) + return false; + + IPC_BEGIN_MESSAGE_MAP(UserScriptIdleScheduler, message) + IPC_MESSAGE_HANDLER(ExtensionMsg_ExecuteCode, OnExecuteCode) + IPC_END_MESSAGE_MAP() + return true; +} + +void UserScriptIdleScheduler::DidFinishDocumentLoad(WebFrame* frame) { + if (frame != frame_) + return; + MessageLoop::current()->PostDelayedTask(FROM_HERE, method_factory_.NewRunnableMethod(&UserScriptIdleScheduler::MaybeRun), kUserScriptIdleTimeoutMs); } -void UserScriptIdleScheduler::DidFinishLoad() { +void UserScriptIdleScheduler::DidFinishLoad(WebFrame* frame) { + if (frame != frame_) + return; + // Ensure that running scripts does not keep any progress UI running. MessageLoop::current()->PostTask(FROM_HERE, method_factory_.NewRunnableMethod(&UserScriptIdleScheduler::MaybeRun)); } -void UserScriptIdleScheduler::Cancel() { - view_ = NULL; - frame_ = NULL; +void UserScriptIdleScheduler::DidStartProvisionalLoad(WebKit::WebFrame* frame) { + // The frame is navigating, so reset the state since we'll want to inject + // scripts once the load finishes. + has_run_ = false; + method_factory_.RevokeAll(); + while (!pending_code_execution_queue_.empty()) + pending_code_execution_queue_.pop(); +} + +void UserScriptIdleScheduler::FrameDetached(WebFrame* frame) { + if (frame != frame_) + return; + + delete this; } void UserScriptIdleScheduler::MaybeRun() { - if (!view_ || has_run()) + if (has_run_) return; - // Note: we must set this before calling OnUserScriptIdleTriggered, because - // that may result in a synchronous call back into MaybeRun if there is a - // pending task currently in the queue. + // Note: we must set this before calling ExecuteCodeImpl, because that may + // result in a synchronous call back into MaybeRun if there is a pending task + // currently in the queue. // http://code.google.com/p/chromium/issues/detail?id=29644 has_run_ = true; - DCHECK(frame_); - view_->OnUserScriptIdleTriggered(frame_); - Cancel(); + if (RenderThread::current()) { // Will be NULL during unit tests. + ExtensionDispatcher::Get()->user_script_slave()->InjectScripts( + frame_, UserScript::DOCUMENT_IDLE); + } + + while (!pending_code_execution_queue_.empty()) { + linked_ptr<ExtensionMsg_ExecuteCode_Params>& params = + pending_code_execution_queue_.front(); + ExecuteCodeImpl(GetMainFrame(), *params); + pending_code_execution_queue_.pop(); + } +} + +void UserScriptIdleScheduler::OnExecuteCode( + const ExtensionMsg_ExecuteCode_Params& params) { + WebFrame* main_frame = GetMainFrame(); + if (!main_frame) { + Send(new ViewHostMsg_ExecuteCodeFinished( + routing_id(), params.request_id, false)); + return; + } + + if (!has_run_) { + pending_code_execution_queue_.push( + linked_ptr<ExtensionMsg_ExecuteCode_Params>( + new ExtensionMsg_ExecuteCode_Params(params))); + return; + } + + ExecuteCodeImpl(main_frame, params); +} + +void UserScriptIdleScheduler::ExecuteCodeImpl( + WebFrame* frame, const ExtensionMsg_ExecuteCode_Params& params) { + std::vector<WebFrame*> frame_vector; + frame_vector.push_back(frame); + if (params.all_frames) + GetAllChildFrames(frame, &frame_vector); + + for (std::vector<WebFrame*>::iterator frame_it = frame_vector.begin(); + frame_it != frame_vector.end(); ++frame_it) { + WebFrame* frame = *frame_it; + if (params.is_javascript) { + const Extension* extension = + ExtensionDispatcher::Get()->extensions()->GetByID( + params.extension_id); + + // Since extension info is sent separately from user script info, they can + // be out of sync. We just ignore this situation. + if (!extension) + continue; + + if (!extension->CanExecuteScriptOnPage(frame->url(), NULL, NULL)) + continue; + + std::vector<WebScriptSource> sources; + sources.push_back( + WebScriptSource(WebString::fromUTF8(params.code))); + UserScriptSlave::InsertInitExtensionCode(&sources, params.extension_id); + frame->executeScriptInIsolatedWorld( + UserScriptSlave::GetIsolatedWorldId(params.extension_id), + &sources.front(), sources.size(), EXTENSION_GROUP_CONTENT_SCRIPTS); + } else { + frame->insertStyleText(WebString::fromUTF8(params.code), WebString()); + } + } + + Send(new ViewHostMsg_ExecuteCodeFinished( + routing_id(), params.request_id, true)); +} + +bool UserScriptIdleScheduler::GetAllChildFrames( + WebFrame* parent_frame, + std::vector<WebFrame*>* frames_vector) const { + if (!parent_frame) + return false; + + for (WebFrame* child_frame = parent_frame->firstChild(); child_frame; + child_frame = child_frame->nextSibling()) { + frames_vector->push_back(child_frame); + GetAllChildFrames(child_frame, frames_vector); + } + return true; +} + +WebFrame* UserScriptIdleScheduler::GetMainFrame() { + WebView* webview = render_view()->webview(); + return webview ? webview->mainFrame() : NULL; } diff --git a/chrome/renderer/user_script_idle_scheduler.h b/chrome/renderer/user_script_idle_scheduler.h index 165db5a..c3ede9a 100644 --- a/chrome/renderer/user_script_idle_scheduler.h +++ b/chrome/renderer/user_script_idle_scheduler.h @@ -6,9 +6,15 @@ #define CHROME_RENDERER_USER_SCRIPT_IDLE_SCHEDULER_H_ #pragma once +#include <queue> +#include <vector> + +#include "base/memory/linked_ptr.h" #include "base/task.h" +#include "content/renderer/render_view_observer.h" class RenderView; +struct ExtensionMsg_ExecuteCode_Params; namespace WebKit { class WebFrame; @@ -24,37 +30,47 @@ class WebFrame; // The intent of this mechanism is to prevent user scripts from slowing down // fast pages (run after load), while still allowing them to run relatively // timely for pages with lots of slow subresources. -class UserScriptIdleScheduler { +class UserScriptIdleScheduler : public RenderViewObserver { public: - UserScriptIdleScheduler(RenderView* view, WebKit::WebFrame* frame); + UserScriptIdleScheduler(RenderView* render_view, WebKit::WebFrame* frame); ~UserScriptIdleScheduler(); - bool has_run() { return has_run_; } - - // Called when the DOM has been completely constructed. - void DidFinishDocumentLoad(); - - // Called when the document has completed loading. - void DidFinishLoad(); - - // Called when the client has gone away and we should no longer run scripts. - void Cancel(); - private: + // RenderViewObserver implementation: + virtual bool OnMessageReceived(const IPC::Message& message); + virtual void DidFinishDocumentLoad(WebKit::WebFrame* frame); + virtual void DidFinishLoad(WebKit::WebFrame* frame); + virtual void DidStartProvisionalLoad(WebKit::WebFrame* frame); + virtual void FrameDetached(WebKit::WebFrame* frame); + // Run user scripts, except if they've already run for this frame, or the // frame has been destroyed. void MaybeRun(); - ScopedRunnableMethodFactory<UserScriptIdleScheduler> method_factory_; + void OnExecuteCode(const ExtensionMsg_ExecuteCode_Params& params); + + // Backend for the IPC Message ExecuteCode in addition to being used + // internally. + void ExecuteCodeImpl(WebKit::WebFrame* frame, + const ExtensionMsg_ExecuteCode_Params& params); + + // Get all child frames of parent_frame, returned by frames_vector. + bool GetAllChildFrames(WebKit::WebFrame* parent_frame, + std::vector<WebKit::WebFrame*>* frames_vector) const; - // The RenderView we will call back to when it is time to run scripts. - RenderView* view_; + WebKit::WebFrame* GetMainFrame(); + + ScopedRunnableMethodFactory<UserScriptIdleScheduler> method_factory_; // The Frame we will run scripts in. WebKit::WebFrame* frame_; // Whether we have already run scripts. bool has_run_; + + // This is only used if we're for the main frame. + std::queue<linked_ptr<ExtensionMsg_ExecuteCode_Params> > + pending_code_execution_queue_; }; #endif // CHROME_RENDERER_USER_SCRIPT_IDLE_SCHEDULER_H_ diff --git a/content/renderer/navigation_state.cc b/content/renderer/navigation_state.cc index 78bebbb..4ab7123 100644 --- a/content/renderer/navigation_state.cc +++ b/content/renderer/navigation_state.cc @@ -4,22 +4,11 @@ #include "content/renderer/navigation_state.h" -#include "chrome/renderer/user_script_idle_scheduler.h" #include "webkit/glue/alt_error_page_resource_fetcher.h" #include "webkit/glue/password_form.h" NavigationState::~NavigationState() {} -void NavigationState::set_user_script_idle_scheduler( - UserScriptIdleScheduler* scheduler) { - user_script_idle_scheduler_.reset(scheduler); -} - -void NavigationState::swap_user_script_idle_scheduler( - NavigationState* state) { - user_script_idle_scheduler_.swap(state->user_script_idle_scheduler_); -} - const base::Time& NavigationState::prerendered_page_display_time() const { return prerendered_page_display_time_; } @@ -67,7 +56,6 @@ NavigationState::NavigationState(PageTransition::Type transition_type, was_started_as_prerender_(false), cache_policy_override_set_(false), cache_policy_override_(WebKit::WebURLRequest::UseProtocolCachePolicy), - user_script_idle_scheduler_(NULL), http_status_code_(0), was_fetched_via_spdy_(false), was_npn_negotiated_(false), diff --git a/content/renderer/navigation_state.h b/content/renderer/navigation_state.h index 6fc06e8..3037568 100644 --- a/content/renderer/navigation_state.h +++ b/content/renderer/navigation_state.h @@ -21,8 +21,6 @@ struct PasswordForm; class AltErrorPageResourceFetcher; } -class UserScriptIdleScheduler; - // The RenderView stores an instance of this class in the "extra data" of each // WebDataSource (see RenderView::DidCreateDataSource). class NavigationState : public WebKit::WebDataSource::ExtraData { @@ -66,12 +64,6 @@ class NavigationState : public WebKit::WebDataSource::ExtraData { return static_cast<NavigationState*>(ds->extraData()); } - UserScriptIdleScheduler* user_script_idle_scheduler() { - return user_script_idle_scheduler_.get(); - } - void set_user_script_idle_scheduler(UserScriptIdleScheduler* scheduler); - void swap_user_script_idle_scheduler(NavigationState* state); - // Contains the page_id for this navigation or -1 if there is none yet. int32 pending_page_id() const { return pending_page_id_; } @@ -318,7 +310,6 @@ class NavigationState : public WebKit::WebDataSource::ExtraData { bool cache_policy_override_set_; WebKit::WebURLRequest::CachePolicy cache_policy_override_; - scoped_ptr<UserScriptIdleScheduler> user_script_idle_scheduler_; int http_status_code_; bool was_fetched_via_spdy_; diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc index 86733e4..9e14c55 100644 --- a/content/renderer/render_view.cc +++ b/content/renderer/render_view.cc @@ -46,7 +46,6 @@ #include "chrome/renderer/automation/dom_automation_controller.h" #include "chrome/renderer/devtools_agent.h" #include "chrome/renderer/devtools_client.h" -#include "chrome/renderer/extension_groups.h" #include "chrome/renderer/extensions/event_bindings.h" #include "chrome/renderer/extensions/extension_dispatcher.h" #include "chrome/renderer/extensions/extension_helper.h" @@ -66,7 +65,6 @@ #include "chrome/renderer/spellchecker/spellcheck.h" #include "chrome/renderer/spellchecker/spellcheck_provider.h" #include "chrome/renderer/translate_helper.h" -#include "chrome/renderer/user_script_idle_scheduler.h" #include "chrome/renderer/user_script_slave.h" #include "chrome/renderer/visitedlink_slave.h" #include "content/common/appcache/appcache_dispatcher.h" @@ -1052,7 +1050,6 @@ bool RenderView::OnMessageReceived(const IPC::Message& message) { #endif IPC_MESSAGE_HANDLER(ViewMsg_SetEditCommandsForNextKeyEvent, OnSetEditCommandsForNextKeyEvent) - IPC_MESSAGE_HANDLER(ExtensionMsg_ExecuteCode, OnExecuteCode) IPC_MESSAGE_HANDLER(ViewMsg_CustomContextMenuAction, OnCustomContextMenuAction) IPC_MESSAGE_HANDLER(ViewMsg_EnableAccessibility, OnEnableAccessibility) @@ -2632,11 +2629,7 @@ void RenderView::frameDetached(WebFrame* frame) { } void RenderView::willClose(WebFrame* frame) { - WebDataSource* ds = frame->dataSource(); - NavigationState* navigation_state = NavigationState::FromDataSource(ds); - page_load_histograms_.Dump(frame); - navigation_state->user_script_idle_scheduler()->Cancel(); FOR_EACH_OBSERVER(RenderViewObserver, observers_, FrameWillClose(frame)); } @@ -2657,7 +2650,6 @@ bool RenderView::allowPlugins(WebFrame* frame, bool enabled_per_settings) { return WebFrameClient::allowPlugins(frame, enabled_per_settings); } - void RenderView::loadURLExternally( WebFrame* frame, const WebURLRequest& request, WebNavigationPolicy policy) { @@ -2985,16 +2977,8 @@ void RenderView::didCreateDataSource(WebFrame* frame, WebDataSource* ds) { } } - // If this datasource already has a UserScriptIdleScheduler, reuse that one. - // This is for navigations within a page (didNavigateWithinPage). See - // http://code.google.com/p/chromium/issues/detail?id=64093 - NavigationState* old_state = NavigationState::FromDataSource(ds); - if (old_state && old_state->user_script_idle_scheduler()) { - state->swap_user_script_idle_scheduler(old_state); - } else { - state->set_user_script_idle_scheduler( - new UserScriptIdleScheduler(this, frame)); - } + FOR_EACH_OBSERVER( + RenderViewObserver, observers_, DidCreateDataSource(frame, ds)); state->set_was_started_as_prerender(is_prerendering_); @@ -3258,28 +3242,6 @@ void RenderView::didFinishDocumentLoad(WebFrame* frame) { ExtensionDispatcher::Get()->user_script_slave()->InjectScripts( frame, UserScript::DOCUMENT_END); } - - // InjectScripts() can end up creating a new NavigationState if it triggers a - // fragment navigation, so we need to re-fetch it here. - navigation_state = NavigationState::FromDataSource(ds); - navigation_state->user_script_idle_scheduler()->DidFinishDocumentLoad(); -} - -void RenderView::OnUserScriptIdleTriggered(WebFrame* frame) { - if (RenderThread::current()) { // Will be NULL during unit tests. - ExtensionDispatcher::Get()->user_script_slave()->InjectScripts( - frame, UserScript::DOCUMENT_IDLE); - } - - WebFrame* main_frame = webview()->mainFrame(); - if (frame == main_frame) { - while (!pending_code_execution_queue_.empty()) { - linked_ptr<ExtensionMsg_ExecuteCode_Params>& params = - pending_code_execution_queue_.front(); - ExecuteCodeImpl(main_frame, *params); - pending_code_execution_queue_.pop(); - } - } } void RenderView::didHandleOnloadEvents(WebFrame* frame) { @@ -3298,7 +3260,6 @@ void RenderView::didFinishLoad(WebFrame* frame) { NavigationState* navigation_state = NavigationState::FromDataSource(ds); DCHECK(navigation_state); navigation_state->set_finish_load_time(Time::Now()); - navigation_state->user_script_idle_scheduler()->DidFinishLoad(); FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidFinishLoad(frame)); @@ -4157,19 +4118,6 @@ void RenderView::OnResetPageEncodingToDefault() { webview()->setPageEncoding(no_encoding); } -bool RenderView::GetAllChildFrames( - WebFrame* parent_frame, - std::vector<WebFrame*>* frames_vector) const { - if (!parent_frame) - return false; - for (WebFrame* child_frame = parent_frame->firstChild(); child_frame; - child_frame = child_frame->nextSibling()) { - frames_vector->push_back(child_frame); - GetAllChildFrames(child_frame, frames_vector); - } - return true; -} - WebFrame* RenderView::GetChildFrame(const std::wstring& xpath) const { if (xpath.empty()) return webview()->mainFrame(); @@ -4866,65 +4814,6 @@ void RenderView::OnSetEditCommandsForNextKeyEvent( edit_commands_ = edit_commands; } -void RenderView::OnExecuteCode(const ExtensionMsg_ExecuteCode_Params& params) { - WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL; - if (!main_frame) { - Send(new ViewHostMsg_ExecuteCodeFinished(routing_id_, params.request_id, - false)); - return; - } - - WebDataSource* ds = main_frame->dataSource(); - NavigationState* navigation_state = NavigationState::FromDataSource(ds); - if (!navigation_state->user_script_idle_scheduler()->has_run()) { - pending_code_execution_queue_.push( - linked_ptr<ExtensionMsg_ExecuteCode_Params>( - new ExtensionMsg_ExecuteCode_Params(params))); - return; - } - - ExecuteCodeImpl(main_frame, params); -} - -void RenderView::ExecuteCodeImpl( - WebFrame* frame, const ExtensionMsg_ExecuteCode_Params& params) { - std::vector<WebFrame*> frame_vector; - frame_vector.push_back(frame); - if (params.all_frames) - GetAllChildFrames(frame, &frame_vector); - - for (std::vector<WebFrame*>::iterator frame_it = frame_vector.begin(); - frame_it != frame_vector.end(); ++frame_it) { - WebFrame* frame = *frame_it; - if (params.is_javascript) { - const Extension* extension = - ExtensionDispatcher::Get()->extensions()->GetByID( - params.extension_id); - - // Since extension info is sent separately from user script info, they can - // be out of sync. We just ignore this situation. - if (!extension) - continue; - - if (!extension->CanExecuteScriptOnPage(frame->url(), NULL, NULL)) - continue; - - std::vector<WebScriptSource> sources; - sources.push_back( - WebScriptSource(WebString::fromUTF8(params.code))); - UserScriptSlave::InsertInitExtensionCode(&sources, params.extension_id); - frame->executeScriptInIsolatedWorld( - UserScriptSlave::GetIsolatedWorldId(params.extension_id), - &sources.front(), sources.size(), EXTENSION_GROUP_CONTENT_SCRIPTS); - } else { - frame->insertStyleText(WebString::fromUTF8(params.code), WebString()); - } - } - - Send(new ViewHostMsg_ExecuteCodeFinished( - routing_id_, params.request_id, true)); -} - void RenderView::Close() { // We need to grab a pointer to the doomed WebView before we destroy it. WebView* doomed = webview(); diff --git a/content/renderer/render_view.h b/content/renderer/render_view.h index 421c960..a47b601 100644 --- a/content/renderer/render_view.h +++ b/content/renderer/render_view.h @@ -80,7 +80,6 @@ class WebPluginDelegatePepper; class WebPluginDelegateProxy; class WebUIBindings; struct ContextMenuMediaParams; -struct ExtensionMsg_ExecuteCode_Params; struct PP_Flash_NetAddress; struct ThumbnailScore; struct ViewHostMsg_RunFileChooser_Params; @@ -305,13 +304,6 @@ class RenderView : public RenderWidget, // Sets whether the renderer should report load progress to the browser. void SetReportLoadProgressEnabled(bool enabled); - // Extensions ---------------------------------------------------------------- - - // Called when the "idle" user script state has been reached. See - // UserScript::DOCUMENT_IDLE. - // TODO(jam): remove me - void OnUserScriptIdleTriggered(WebKit::WebFrame* frame); - // Plugin-related functions -------------------------------------------------- // (See also WebPluginPageDelegate implementation.) @@ -822,7 +814,6 @@ class RenderView : public RenderWidget, WebKit::WebDragOperationsMask operations_allowed); void OnEnablePreferredSizeChangedMode(int flags); void OnEnableViewSourceMode(); - void OnExecuteCode(const ExtensionMsg_ExecuteCode_Params& params); void OnExecuteEditCommand(const std::string& name, const std::string& value); void OnFileChooserResponse(const std::vector<FilePath>& paths); void OnFind(int request_id, const string16&, const WebKit::WebFindOptions&); @@ -965,15 +956,6 @@ class RenderView : public RenderWidget, // image doesn't have a frame at the specified size, the first is returned. bool DownloadImage(int id, const GURL& image_url, int image_size); - // Backend for the IPC Message ExecuteCode in addition to being used - // internally by other RenderView functions. - void ExecuteCodeImpl(WebKit::WebFrame* frame, - const ExtensionMsg_ExecuteCode_Params& params); - - // Get all child frames of parent_frame, returned by frames_vector. - bool GetAllChildFrames(WebKit::WebFrame* parent_frame, - std::vector<WebKit::WebFrame* >* frames_vector) const; - GURL GetAlternateErrorPageURL(const GURL& failed_url, ErrorPageType error_type); @@ -1304,9 +1286,6 @@ class RenderView : public RenderWidget, struct PendingFileChooser; std::deque< linked_ptr<PendingFileChooser> > file_chooser_completions_; - std::queue<linked_ptr<ExtensionMsg_ExecuteCode_Params> > - pending_code_execution_queue_; - // ImageResourceFetchers schedule via DownloadImage. ImageResourceFetcherList image_fetchers_; diff --git a/content/renderer/render_view_observer.h b/content/renderer/render_view_observer.h index cfa1cb4..e03156a 100644 --- a/content/renderer/render_view_observer.h +++ b/content/renderer/render_view_observer.h @@ -12,6 +12,7 @@ class RenderView; namespace WebKit { +class WebDataSource; class WebFrame; class WebMouseEvent; struct WebURLError; @@ -38,6 +39,8 @@ class RenderViewObserver : public IPC::Channel::Listener, bool is_new_navigation) {} virtual void FrameDetached(WebKit::WebFrame* frame) {} virtual void FrameWillClose(WebKit::WebFrame* frame) {} + virtual void DidCreateDataSource(WebKit::WebFrame* frame, + WebKit::WebDataSource* ds) {} // These match the RenderView methods below. virtual void FrameTranslated(WebKit::WebFrame* frame) {} |