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

Unified Diff: extensions/renderer/dispatcher.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/dispatcher.cc
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index a8a2b3ed3076b3dc1d3405b6025a9c2025ce59cc..8a7cc96a0a2c642162db8a72ec8a856e532669d8 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -500,6 +500,31 @@ void Dispatcher::DidCreateDocumentElement(blink::WebLocalFrame* frame) {
}
}
+void Dispatcher::AfterDidCreateDocumentElement(
+ content::RenderFrame* render_frame) {
+ ExtensionFrameHelper* frame_helper = ExtensionFrameHelper::Get(render_frame);
+ if (!frame_helper)
+ return; // The frame is invisible to extensions.
+
+ base::WeakPtr<ExtensionFrameHelper> frame_helper_weak =
+ frame_helper->AsWeakPtr();
+
+ script_injection_manager_->AfterDidCreateDocumentElement(render_frame);
Devlin 2016/02/12 22:21:56 Would it make sense to have the script injection m
robwu 2016/02/12 22:37:13 I avoided that, because ScriptInjectionManager nee
Devlin 2016/02/12 22:51:01 What's the optimization there? Just avoiding crea
robwu 2016/02/12 23:24:49 This happens (which seems not that expensive): 1.
Devlin 2016/02/12 23:42:24 That sounds reasonable to me. If we're going to s
+ if (!frame_helper_weak.get())
+ return; // Frame was destroyed by injected user script.
+
+ frame_helper->AfterDidCreateDocumentElement();
+}
+
+void Dispatcher::AfterDidFinishDocumentLoad(
+ content::RenderFrame* render_frame) {
+ if (!ExtensionFrameHelper::Get(render_frame))
+ return; // The frame is invisible to extensions.
+
+ script_injection_manager_->AfterDidFinishDocumentLoad(render_frame);
+ // The frame might be destroyed by the injected user script at this point.
+}
+
void Dispatcher::OnExtensionResponse(int request_id,
bool success,
const base::ListValue& response,

Powered by Google App Engine
This is Rietveld 408576698