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

Unified Diff: extensions/renderer/script_injection_manager.cc

Issue 1642283002: Deal with frame removal by content scripts (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Push down WeakPtr Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: extensions/renderer/script_injection_manager.cc
diff --git a/extensions/renderer/script_injection_manager.cc b/extensions/renderer/script_injection_manager.cc
index aa0f5d32b9aa35ee7c4cbb85461f79899b169c6e..e1273b8ba77d0ae758328247dd36ea0de361c526 100644
--- a/extensions/renderer/script_injection_manager.cc
+++ b/extensions/renderer/script_injection_manager.cc
@@ -70,7 +70,6 @@ class ScriptInjectionManager::RFOHelper : public content::RenderFrameObserver {
// RenderFrameObserver implementation.
bool OnMessageReceived(const IPC::Message& message) override;
void DidCreateNewDocument() override;
- void DidCreateDocumentElement() override;
void DidFailProvisionalLoad(const blink::WebURLError& error) override;
void DidFinishDocumentLoad() override;
void DidFinishLoad() override;
@@ -135,10 +134,6 @@ void ScriptInjectionManager::RFOHelper::DidCreateNewDocument() {
InvalidateAndResetFrame();
}
-void ScriptInjectionManager::RFOHelper::DidCreateDocumentElement() {
- manager_->StartInjectScripts(render_frame(), UserScript::DOCUMENT_START);
-}
-
void ScriptInjectionManager::RFOHelper::DidFailProvisionalLoad(
const blink::WebURLError& error) {
FrameStatusMap::iterator it = manager_->frame_statuses_.find(render_frame());
@@ -162,7 +157,6 @@ void ScriptInjectionManager::RFOHelper::DidFailProvisionalLoad(
void ScriptInjectionManager::RFOHelper::DidFinishDocumentLoad() {
DCHECK(content::RenderThread::Get());
- manager_->StartInjectScripts(render_frame(), UserScript::DOCUMENT_END);
// We try to run idle in two places: here and DidFinishLoad.
// DidFinishDocumentLoad() corresponds to completing the document's load,
// whereas DidFinishLoad corresponds to completing the document and all
@@ -175,6 +169,9 @@ void ScriptInjectionManager::RFOHelper::DidFinishDocumentLoad() {
base::Bind(&ScriptInjectionManager::RFOHelper::RunIdle,
weak_factory_.GetWeakPtr()),
base::TimeDelta::FromMilliseconds(kScriptIdleTimeoutInMs));
+
+ // Soon after this method returns, AfterDidFinishDocumentLoad will be called,
+ // which injects the DOCUMENT_END scripts.
}
void ScriptInjectionManager::RFOHelper::DidFinishLoad() {
@@ -254,6 +251,16 @@ ScriptInjectionManager::~ScriptInjectionManager() {
injection->invalidate_render_frame();
}
+void ScriptInjectionManager::AfterDidCreateDocumentElement(
Devlin 2016/02/12 22:21:56 In general, it kind of makes me sad that we can't
+ content::RenderFrame* render_frame) {
+ StartInjectScripts(render_frame, UserScript::DOCUMENT_START);
+}
+
+void ScriptInjectionManager::AfterDidFinishDocumentLoad(
+ content::RenderFrame* render_frame) {
+ StartInjectScripts(render_frame, UserScript::DOCUMENT_END);
+}
+
void ScriptInjectionManager::OnRenderFrameCreated(
content::RenderFrame* render_frame) {
rfo_helpers_.push_back(make_scoped_ptr(new RFOHelper(render_frame, this)));

Powered by Google App Engine
This is Rietveld 408576698