| Index: services/navigation/view_impl.cc
|
| diff --git a/services/navigation/view_impl.cc b/services/navigation/view_impl.cc
|
| deleted file mode 100644
|
| index 90975f34009307ce364582606fd18eec03737ab5..0000000000000000000000000000000000000000
|
| --- a/services/navigation/view_impl.cc
|
| +++ /dev/null
|
| @@ -1,320 +0,0 @@
|
| -// Copyright 2016 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 "services/navigation/view_impl.h"
|
| -
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "content/public/browser/browser_context.h"
|
| -#include "content/public/browser/interstitial_page.h"
|
| -#include "content/public/browser/interstitial_page_delegate.h"
|
| -#include "content/public/browser/navigation_controller.h"
|
| -#include "content/public/browser/navigation_details.h"
|
| -#include "content/public/browser/navigation_entry.h"
|
| -#include "content/public/browser/notification_details.h"
|
| -#include "content/public/browser/notification_source.h"
|
| -#include "content/public/browser/notification_types.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "services/service_manager/public/cpp/connector.h"
|
| -#include "ui/aura/mus/window_tree_client.h"
|
| -#include "ui/aura/mus/window_tree_host_mus.h"
|
| -#include "ui/views/controls/webview/webview.h"
|
| -#include "ui/views/widget/widget.h"
|
| -#include "url/gurl.h"
|
| -
|
| -namespace navigation {
|
| -namespace {
|
| -
|
| -class InterstitialPageDelegate : public content::InterstitialPageDelegate {
|
| - public:
|
| - explicit InterstitialPageDelegate(const std::string& html) : html_(html) {}
|
| - ~InterstitialPageDelegate() override {}
|
| - InterstitialPageDelegate(const InterstitialPageDelegate&) = delete;
|
| - void operator=(const InterstitialPageDelegate&) = delete;
|
| -
|
| - private:
|
| -
|
| - // content::InterstitialPageDelegate:
|
| - std::string GetHTMLContents() override {
|
| - return html_;
|
| - }
|
| -
|
| - const std::string html_;
|
| -};
|
| -
|
| -// TODO(beng): Explicitly not writing a TypeConverter for this, and not doing a
|
| -// typemap just yet since I'm still figuring out what these
|
| -// interfaces should take as parameters.
|
| -mojom::NavigationEntryPtr EntryPtrFromNavEntry(
|
| - const content::NavigationEntry& entry) {
|
| - mojom::NavigationEntryPtr entry_ptr(mojom::NavigationEntry::New());
|
| - entry_ptr->id = entry.GetUniqueID();
|
| - entry_ptr->url = entry.GetURL();
|
| - entry_ptr->title = base::UTF16ToUTF8(entry.GetTitle());
|
| - entry_ptr->redirect_chain = entry.GetRedirectChain();
|
| - return entry_ptr;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -ViewImpl::ViewImpl(std::unique_ptr<service_manager::Connector> connector,
|
| - const std::string& client_user_id,
|
| - mojom::ViewClientPtr client,
|
| - std::unique_ptr<service_manager::ServiceContextRef> ref)
|
| - : connector_(std::move(connector)),
|
| - client_(std::move(client)),
|
| - ref_(std::move(ref)),
|
| - web_view_(new views::WebView(
|
| - content::BrowserContext::GetBrowserContextForServiceUserId(
|
| - client_user_id))) {
|
| - web_view_->GetWebContents()->SetDelegate(this);
|
| - const content::NavigationController* controller =
|
| - &web_view_->GetWebContents()->GetController();
|
| - registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_PENDING,
|
| - content::Source<content::NavigationController>(controller));
|
| - registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
|
| - content::Source<content::NavigationController>(controller));
|
| - registrar_.Add(this, content::NOTIFICATION_NAV_LIST_PRUNED,
|
| - content::Source<content::NavigationController>(controller));
|
| - registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_CHANGED,
|
| - content::Source<content::NavigationController>(controller));
|
| -}
|
| -
|
| -ViewImpl::~ViewImpl() {
|
| - DeleteTreeAndWidget();
|
| -}
|
| -
|
| -void ViewImpl::DeleteTreeAndWidget() {
|
| - widget_.reset();
|
| - window_tree_host_.reset();
|
| - window_tree_client_.reset();
|
| -}
|
| -
|
| -void ViewImpl::NavigateTo(const GURL& url) {
|
| - web_view_->GetWebContents()->GetController().LoadURL(
|
| - url, content::Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| -}
|
| -
|
| -void ViewImpl::GoBack() {
|
| - web_view_->GetWebContents()->GetController().GoBack();
|
| -}
|
| -
|
| -void ViewImpl::GoForward() {
|
| - web_view_->GetWebContents()->GetController().GoForward();
|
| -}
|
| -
|
| -void ViewImpl::NavigateToOffset(int offset) {
|
| - web_view_->GetWebContents()->GetController().GoToOffset(offset);
|
| -}
|
| -
|
| -void ViewImpl::Reload(bool bypass_cache) {
|
| - web_view_->GetWebContents()->GetController().Reload(
|
| - bypass_cache ? content::ReloadType::BYPASSING_CACHE
|
| - : content::ReloadType::NORMAL,
|
| - true);
|
| -}
|
| -
|
| -void ViewImpl::Stop() {
|
| - web_view_->GetWebContents()->Stop();
|
| -}
|
| -
|
| -void ViewImpl::GetWindowTreeClient(ui::mojom::WindowTreeClientRequest request) {
|
| - window_tree_client_ = base::MakeUnique<aura::WindowTreeClient>(
|
| - connector_.get(), this, nullptr, std::move(request));
|
| -}
|
| -
|
| -void ViewImpl::ShowInterstitial(const std::string& html) {
|
| - content::InterstitialPage* interstitial =
|
| - content::InterstitialPage::Create(web_view_->GetWebContents(),
|
| - false,
|
| - GURL(),
|
| - new InterstitialPageDelegate(html));
|
| - interstitial->Show();
|
| -}
|
| -
|
| -void ViewImpl::HideInterstitial() {
|
| - // TODO(beng): this is not quite right.
|
| - if (web_view_->GetWebContents()->ShowingInterstitialPage())
|
| - web_view_->GetWebContents()->GetInterstitialPage()->Proceed();
|
| -}
|
| -
|
| -void ViewImpl::AddNewContents(content::WebContents* source,
|
| - content::WebContents* new_contents,
|
| - WindowOpenDisposition disposition,
|
| - const gfx::Rect& initial_rect,
|
| - bool user_gesture,
|
| - bool* was_blocked) {
|
| - mojom::ViewClientPtr client;
|
| - mojom::ViewPtr view;
|
| - auto view_request = mojo::MakeRequest(&view);
|
| - client_->ViewCreated(std::move(view), MakeRequest(&client),
|
| - disposition == WindowOpenDisposition::NEW_POPUP,
|
| - initial_rect, user_gesture);
|
| -
|
| - const std::string new_user_id =
|
| - content::BrowserContext::GetServiceUserIdFor(
|
| - new_contents->GetBrowserContext());
|
| - auto impl = base::MakeUnique<ViewImpl>(connector_->Clone(), new_user_id,
|
| - std::move(client), ref_->Clone());
|
| -
|
| - // TODO(beng): This is a bit crappy. should be able to create the ViewImpl
|
| - // with |new_contents| instead.
|
| - impl->web_view_->SetWebContents(new_contents);
|
| - impl->web_view_->GetWebContents()->SetDelegate(impl.get());
|
| -
|
| - // TODO(beng): this reply is currently synchronous, figure out a fix.
|
| - if (was_blocked)
|
| - *was_blocked = false;
|
| -
|
| - mojo::MakeStrongBinding(std::move(impl), std::move(view_request));
|
| -}
|
| -
|
| -void ViewImpl::CloseContents(content::WebContents* source) {
|
| - client_->Close();
|
| -}
|
| -
|
| -content::WebContents* ViewImpl::OpenURLFromTab(
|
| - content::WebContents* source,
|
| - const content::OpenURLParams& params) {
|
| - mojom::OpenURLParamsPtr params_ptr = mojom::OpenURLParams::New();
|
| - params_ptr->url = params.url;
|
| - params_ptr->disposition =
|
| - static_cast<mojom::WindowOpenDisposition>(params.disposition);
|
| - client_->OpenURL(std::move(params_ptr));
|
| - // TODO(beng): Obviously this is the wrong thing to return for dispositions
|
| - // that would lead to the creation of a new View, i.e. NEW_TAB, NEW_POPUP etc.
|
| - // However it seems the callers of this function that we've seen so far
|
| - // disregard the return value. Rather than returning |source| I'm returning
|
| - // nullptr to locate (via crash) any sites that depend on a valid result.
|
| - // If we actually had to do this then we'd have to create the new WebContents
|
| - // here, store it with a cookie, and pass the cookie through to the client to
|
| - // pass back with their call to CreateView(), so it would get bound to the
|
| - // WebContents.
|
| - return nullptr;
|
| -}
|
| -
|
| -void ViewImpl::LoadingStateChanged(content::WebContents* source,
|
| - bool to_different_document) {
|
| - client_->LoadingStateChanged(source->IsLoading());
|
| -}
|
| -
|
| -void ViewImpl::NavigationStateChanged(content::WebContents* source,
|
| - content::InvalidateTypes changed_flags) {
|
| - client_->NavigationStateChanged(source->GetVisibleURL(),
|
| - base::UTF16ToUTF8(source->GetTitle()),
|
| - source->GetController().CanGoBack(),
|
| - source->GetController().CanGoForward());
|
| -}
|
| -
|
| -void ViewImpl::LoadProgressChanged(content::WebContents* source,
|
| - double progress) {
|
| - client_->LoadProgressChanged(progress);
|
| -}
|
| -
|
| -void ViewImpl::UpdateTargetURL(content::WebContents* source, const GURL& url) {
|
| - client_->UpdateHoverURL(url);
|
| -}
|
| -
|
| -void ViewImpl::Observe(int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) {
|
| - if (content::Source<content::NavigationController>(source).ptr() !=
|
| - &web_view_->GetWebContents()->GetController()) {
|
| - return;
|
| - }
|
| -
|
| - switch (type) {
|
| - case content::NOTIFICATION_NAV_ENTRY_PENDING: {
|
| - const content::NavigationEntry* entry =
|
| - content::Details<content::NavigationEntry>(details).ptr();
|
| - client_->NavigationPending(EntryPtrFromNavEntry(*entry));
|
| - break;
|
| - }
|
| - case content::NOTIFICATION_NAV_ENTRY_COMMITTED: {
|
| - const content::LoadCommittedDetails* lcd =
|
| - content::Details<content::LoadCommittedDetails>(details).ptr();
|
| - mojom::NavigationCommittedDetailsPtr details_ptr(
|
| - mojom::NavigationCommittedDetails::New());
|
| - details_ptr->entry = lcd->entry->GetUniqueID();
|
| - details_ptr->type = static_cast<mojom::NavigationType>(lcd->type);
|
| - details_ptr->previous_entry_index = lcd->previous_entry_index;
|
| - details_ptr->previous_url = lcd->previous_url;
|
| - details_ptr->is_in_page = lcd->is_same_document;
|
| - details_ptr->is_main_frame = lcd->is_main_frame;
|
| - details_ptr->http_status_code = lcd->http_status_code;
|
| - client_->NavigationCommitted(
|
| - std::move(details_ptr),
|
| - web_view_->GetWebContents()->GetController().GetCurrentEntryIndex());
|
| - break;
|
| - }
|
| - case content::NOTIFICATION_NAV_ENTRY_CHANGED: {
|
| - const content::EntryChangedDetails* ecd =
|
| - content::Details<content::EntryChangedDetails>(details).ptr();
|
| - client_->NavigationEntryChanged(EntryPtrFromNavEntry(*ecd->changed_entry),
|
| - ecd->index);
|
| - break;
|
| - }
|
| - case content::NOTIFICATION_NAV_LIST_PRUNED: {
|
| - const content::PrunedDetails* pd =
|
| - content::Details<content::PrunedDetails>(details).ptr();
|
| - client_->NavigationListPruned(pd->from_front, pd->count);
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| -}
|
| -
|
| -void ViewImpl::OnEmbed(
|
| - std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) {
|
| - // TODO: Supplying a WindowTreeHostMus isn't particularly ideal in this case.
|
| - // In particular it would be nice if the WindowTreeClientDelegate could create
|
| - // its own WindowTreeHostMus, that way this code could directly create a
|
| - // DesktopWindowTreeTreeHostMus.
|
| - window_tree_host_ = std::move(window_tree_host);
|
| - DCHECK(!widget_.get());
|
| - // TODO: fix this. The following won't work if multiple WindowTreeClients
|
| - // are used at the same time. The best fix is to have the ability to specify
|
| - // a WindowTreeClient when DesktopNativeWidgetAura is created so that it can
|
| - // create WindowPortMus with the correct client.
|
| - widget_.reset(new views::Widget);
|
| - views::Widget::InitParams params(
|
| - views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
|
| - params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| - params.delegate = this;
|
| - widget_->Init(params);
|
| - widget_->Show();
|
| -}
|
| -
|
| -void ViewImpl::OnEmbedRootDestroyed(aura::WindowTreeHostMus* window_tree_host) {
|
| - DCHECK_EQ(window_tree_host, window_tree_host_.get());
|
| - DeleteTreeAndWidget();
|
| -}
|
| -
|
| -void ViewImpl::OnLostConnection(aura::WindowTreeClient* client) {
|
| - DeleteTreeAndWidget();
|
| -}
|
| -
|
| -void ViewImpl::OnPointerEventObserved(const ui::PointerEvent& event,
|
| - aura::Window* target) {}
|
| -
|
| -aura::PropertyConverter* ViewImpl::GetPropertyConverter() {
|
| - // TODO: wire this up.
|
| - return nullptr;
|
| -}
|
| -
|
| -views::View* ViewImpl::GetContentsView() {
|
| - return web_view_;
|
| -}
|
| -
|
| -views::Widget* ViewImpl::GetWidget() {
|
| - return web_view_->GetWidget();
|
| -}
|
| -
|
| -const views::Widget* ViewImpl::GetWidget() const {
|
| - return web_view_->GetWidget();
|
| -}
|
| -
|
| -} // navigation
|
|
|