diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-31 18:42:28 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-31 18:42:28 +0000 |
commit | 946a003c47baa60549ccb8b74f611d7cb9c61dce (patch) | |
tree | ea812dcf907e321cb8df39f9b7c2a82e524567dd /content | |
parent | acda308500fea6641a79f7584516d7d153a4a241 (diff) | |
download | chromium_src-946a003c47baa60549ccb8b74f611d7cb9c61dce.zip chromium_src-946a003c47baa60549ccb8b74f611d7cb9c61dce.tar.gz chromium_src-946a003c47baa60549ccb8b74f611d7cb9c61dce.tar.bz2 |
Make UserScriptIdleScheduler not tied to NavigationState, as part of removing the extension dependencies from content.
Review URL: http://codereview.chromium.org/6731080
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80029 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-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 |
5 files changed, 5 insertions, 155 deletions
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) {} |