summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-31 18:42:28 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-31 18:42:28 +0000
commit946a003c47baa60549ccb8b74f611d7cb9c61dce (patch)
treeea812dcf907e321cb8df39f9b7c2a82e524567dd /content
parentacda308500fea6641a79f7584516d7d153a4a241 (diff)
downloadchromium_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.cc12
-rw-r--r--content/renderer/navigation_state.h9
-rw-r--r--content/renderer/render_view.cc115
-rw-r--r--content/renderer/render_view.h21
-rw-r--r--content/renderer/render_view_observer.h3
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) {}