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

Unified Diff: chrome/browser/webview/webview_guest.cc

Issue 17165004: <webview>: Partially migrate loadcommit event from content to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed unnecessary line of code Created 7 years, 6 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: chrome/browser/webview/webview_guest.cc
diff --git a/chrome/browser/webview/webview_guest.cc b/chrome/browser/webview/webview_guest.cc
index 958b0e2930d772131d8fc271dba098b0e14acb7a..37afe5df7d8565923f9731884df01bb73356e9fc 100644
--- a/chrome/browser/webview/webview_guest.cc
+++ b/chrome/browser/webview/webview_guest.cc
@@ -5,8 +5,12 @@
#include "chrome/browser/webview/webview_guest.h"
#include "base/lazy_instance.h"
+#include "base/strings/stringprintf.h"
#include "chrome/browser/extensions/api/web_request/web_request_api.h"
+#include "chrome/browser/extensions/api/webview/webview_api_constants.h"
+#include "chrome/browser/extensions/event_router.h"
#include "chrome/browser/extensions/extension_renderer_state.h"
+#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/script_executor.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
@@ -15,6 +19,8 @@
using content::WebContents;
+namespace keys = webview_api_constants;
+
namespace chrome {
namespace {
@@ -64,13 +70,48 @@ WebViewGuest* WebViewGuest::From(int embedder_process_id,
return it == guest_map->end() ? NULL : it->second;
}
+void WebViewGuest::DispatchEvent(const std::string& event_name,
+ scoped_ptr<DictionaryValue> event) {
+ Profile* profile = Profile::FromBrowserContext(
+ web_contents()->GetBrowserContext());
+
+ extensions::EventFilteringInfo info;
+ info.SetURL(GURL());
+ info.SetInstanceID(guest_instance_id_);
+ scoped_ptr<ListValue> args(new ListValue());
+ args->Append(event.release());
+
+ extensions::EventRouter::DispatchEvent(
+ embedder_web_contents_, profile, extension_id_,
+ base::StringPrintf("webview.on%s", event_name.c_str()), args.Pass(),
+ extensions::EventRouter::USER_GESTURE_UNKNOWN, info);
+}
+
WebViewGuest::~WebViewGuest() {
std::pair<int, int> key(embedder_render_process_id_, guest_instance_id_);
webview_guest_map.Get().erase(key);
}
+void WebViewGuest::DidCommitProvisionalLoadForFrame(
+ int64 frame_id,
+ bool is_main_frame,
+ const GURL& url,
+ content::PageTransition transition_type,
+ content::RenderViewHost* render_view_host) {
+ scoped_ptr<DictionaryValue> event(new DictionaryValue());
+ event->SetString(keys::kUrl, url.spec());
+ event->SetBoolean(keys::kIsTopLevel, is_main_frame);
+ DispatchEvent(keys::kEventLoadCommit, event.Pass());
+}
+
void WebViewGuest::WebContentsDestroyed(WebContents* web_contents) {
RemoveWebViewFromExtensionRendererState(web_contents);
+ extensions::EventRouter* router =
+ extensions::ExtensionSystem::Get(static_cast<Profile*>(profile_))->
+ event_router();
+ router->RemoveEventListener("webview.onloadcommit",
+ embedder_web_contents_->GetRenderProcessHost(),
+ extension_id_);
content::BrowserThread::PostTask(
content::BrowserThread::IO,
FROM_HERE,

Powered by Google App Engine
This is Rietveld 408576698