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

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: Add AfterDidCreateDocumentElement/AfterDidFinishDocumentLoad 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..7f3e1e63c69d170f80f092b01246e03c88adcba5 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -500,6 +500,30 @@ void Dispatcher::DidCreateDocumentElement(blink::WebLocalFrame* frame) {
}
}
+void Dispatcher::AfterDidCreateDocumentElement(
+ const base::WeakPtr<content::RenderFrame>& render_frame) {
+ DCHECK(render_frame.get());
+ ExtensionFrameHelper* frame_helper =
+ ExtensionFrameHelper::Get(render_frame.get());
ncarter (slow) 2016/02/11 22:47:32 Nasko pointed me at this CL to see if there might
robwu 2016/02/11 23:36:50 Done. I don't see any issue with passing a weakptr
ncarter (slow) 2016/02/12 19:32:57 I'm not opposed to it per se either, but I think i
robwu 2016/02/12 19:51:43 That makes sense. Thanks for explaining your line
+ if (!frame_helper)
+ return; // The frame is invisible to extensions.
+
+ script_injection_manager_->AfterDidCreateDocumentElement(render_frame.get());
+ if (!render_frame.get())
+ return; // Frame was destroyed by injected user script.
+
+ frame_helper->AfterDidCreateDocumentElement(render_frame);
+}
+
+void Dispatcher::AfterDidFinishDocumentLoad(
+ const base::WeakPtr<content::RenderFrame>& render_frame) {
+ if (!ExtensionFrameHelper::Get(render_frame.get()))
+ return; // The frame is invisible to extensions.
+
+ script_injection_manager_->AfterDidFinishDocumentLoad(render_frame.get());
+ // 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