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

Unified Diff: components/framelet/browser/framelet_guest.cc

Issue 1529653002: Prototype FrameletGuest/Container Class stubs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « components/framelet/browser/framelet_guest.h ('k') | components/framelet/common/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/framelet/browser/framelet_guest.cc
diff --git a/components/framelet/browser/framelet_guest.cc b/components/framelet/browser/framelet_guest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d140f98e43e6081b42ae27909306170d91505aa7
--- /dev/null
+++ b/components/framelet/browser/framelet_guest.cc
@@ -0,0 +1,80 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/framelet/browser/framelet_guest.h"
+
+#include "base/strings/stringprintf.h"
+#include "components/framelet/common/framelet_constants.h"
+#include "components/guest_view/browser/guest_view_manager.h"
+#include "content/public/browser/site_instance.h"
+#include "content/public/common/url_constants.h"
+
+
+namespace guest_view {
+
+// static.
+const char FrameletGuest::Type[] = "framelet";
+
+GuestViewBase* FrameletGuest::Create(content::WebContents* owner_web_contents) {
+ return new FrameletGuest(owner_web_contents);
+}
+
+FrameletGuest::FrameletGuest(content::WebContents* owner_web_contents)
+ : GuestView<FrameletGuest>(owner_web_contents) {}
+
+FrameletGuest::~FrameletGuest() {}
+
+// content::WebContentsDelegate implementation.
+bool FrameletGuest::HandleContextMenu(
+ const content::ContextMenuParams& params) {
+ return false;
+}
+
+const char* FrameletGuest::GetAPINamespace() const {
+ return framelet::kEmbedderAPINamespace;
+}
+
+int FrameletGuest::GetTaskPrefix() const {
+ return 0; // TODO(wjmaclean): implement this.
+}
+
+void FrameletGuest::CreateWebContents(
+ const base::DictionaryValue& create_params,
+ const GuestViewBase::WebContentsCreatedCallback& callback) {
+ std::string url;
+ if (!create_params.GetString(framelet::kURL, &url)) {
+ callback.Run(nullptr);
+ return;
+ }
+
+ url_ = GURL(url);
+ if (!url_.is_valid()) {
+ callback.Run(nullptr);
+ return;
+ }
+
+ // TODO(wjmaclean): modify this so the framelets instances are unique to a
+ // given embedder process.
+ GURL guest_site(base::StringPrintf("%s://framelet-%s",
+ content::kGuestScheme,
+ GetOwnerSiteURL().host().c_str()));
+
+ GuestViewManager* guest_view_manager = GuestViewManager::FromBrowserContext(
+ owner_web_contents()->GetBrowserContext());
+ content::SiteInstance* guest_site_instance =
+ guest_view_manager->GetGuestSiteInstance(guest_site);
+ content::WebContents::CreateParams params(
+ owner_web_contents()->GetBrowserContext(),
+ guest_site_instance);
+ params.guest_delegate = this;
+ callback.Run(content::WebContents::Create(params));
+}
+
+void FrameletGuest::DidAttachToEmbedder() {
+ web_contents()->GetController().LoadURL(
+ url_, content::Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
+ url_ = GURL();
+}
+
+} // namespace guest_view
« no previous file with comments | « components/framelet/browser/framelet_guest.h ('k') | components/framelet/common/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698