| 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
|
|
|