Index: components/html_viewer/frame_tree_manager.cc |
diff --git a/components/html_viewer/frame_tree_manager.cc b/components/html_viewer/frame_tree_manager.cc |
deleted file mode 100644 |
index a137a42759b77653184b9545a97831a138269ef1..0000000000000000000000000000000000000000 |
--- a/components/html_viewer/frame_tree_manager.cc |
+++ /dev/null |
@@ -1,218 +0,0 @@ |
-// 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/html_viewer/frame_tree_manager.h" |
- |
-#include <algorithm> |
- |
-#include "base/command_line.h" |
-#include "base/logging.h" |
-#include "components/html_viewer/blink_basic_type_converters.h" |
-#include "components/html_viewer/blink_url_request_type_converters.h" |
-#include "components/html_viewer/frame.h" |
-#include "components/html_viewer/frame_tree_manager_delegate.h" |
-#include "components/html_viewer/global_state.h" |
-#include "components/view_manager/public/cpp/view_manager.h" |
-#include "mojo/application/public/cpp/application_connection.h" |
-#include "mojo/application/public/cpp/application_impl.h" |
-#include "third_party/WebKit/public/web/WebLocalFrame.h" |
-#include "third_party/WebKit/public/web/WebRemoteFrame.h" |
-#include "third_party/WebKit/public/web/WebTreeScopeType.h" |
-#include "third_party/WebKit/public/web/WebView.h" |
-#include "ui/gfx/geometry/dip_util.h" |
-#include "ui/gfx/geometry/size.h" |
- |
-namespace html_viewer { |
-namespace { |
- |
-mojo::Target WebNavigationPolicyToNavigationTarget( |
- blink::WebNavigationPolicy policy) { |
- switch (policy) { |
- case blink::WebNavigationPolicyCurrentTab: |
- return mojo::TARGET_SOURCE_NODE; |
- case blink::WebNavigationPolicyNewBackgroundTab: |
- case blink::WebNavigationPolicyNewForegroundTab: |
- case blink::WebNavigationPolicyNewWindow: |
- case blink::WebNavigationPolicyNewPopup: |
- return mojo::TARGET_NEW_NODE; |
- default: |
- return mojo::TARGET_DEFAULT; |
- } |
-} |
- |
-bool CanNavigateLocally(blink::WebFrame* frame, |
- const blink::WebURLRequest& request) { |
- // If we have extraData() it means we already have the url response |
- // (presumably because we are being called via Navigate()). In that case we |
- // can go ahead and navigate locally. |
- if (request.extraData()) |
- return true; |
- |
- // Otherwise we don't know if we're the right app to handle this request. Ask |
- // host to do the navigation for us. |
- return false; |
-} |
- |
-// Creates a Frame per FrameData element in |frame_data|. |
-Frame* BuildFrameTree(FrameTreeManager* frame_tree_manager, |
- const mojo::Array<mandoline::FrameDataPtr>& frame_data, |
- uint32_t local_frame_id, |
- mojo::View* local_view) { |
- std::vector<Frame*> parents; |
- Frame* root = nullptr; |
- Frame* last_frame = nullptr; |
- for (size_t i = 0; i < frame_data.size(); ++i) { |
- if (last_frame && frame_data[i]->parent_id == last_frame->id()) { |
- parents.push_back(last_frame); |
- } else if (!parents.empty()) { |
- while (parents.back()->id() != frame_data[i]->parent_id) |
- parents.pop_back(); |
- } |
- Frame::CreateParams params(frame_tree_manager, |
- !parents.empty() ? parents.back() : nullptr, |
- frame_data[i]->frame_id); |
- Frame* frame = new Frame(params); |
- if (!last_frame) |
- root = frame; |
- else |
- DCHECK(frame->parent()); |
- last_frame = frame; |
- |
- frame->Init(local_view, frame_data[i]->name.To<blink::WebString>(), |
- frame_data[i]->origin.To<blink::WebString>()); |
- } |
- return root; |
-} |
- |
-} // namespace |
- |
-FrameTreeManager::FrameTreeManager(GlobalState* global_state, |
- mojo::ApplicationImpl* app, |
- mojo::ApplicationConnection* app_connection, |
- uint32_t local_frame_id, |
- mandoline::FrameTreeServerPtr server) |
- : global_state_(global_state), |
- app_(app), |
- delegate_(nullptr), |
- local_frame_id_(local_frame_id), |
- server_(server.Pass()), |
- navigator_host_(app_connection->GetServiceProvider()), |
- root_(nullptr) { |
-} |
- |
-FrameTreeManager::~FrameTreeManager() { |
- if (root_) |
- root_->Close(); // This should call back to OnFrameDestroyed(). |
- DCHECK(!root_); |
-} |
- |
-void FrameTreeManager::Init(mojo::View* local_view, |
- mojo::Array<mandoline::FrameDataPtr> frame_data) { |
- root_ = BuildFrameTree(this, frame_data, local_frame_id_, local_view); |
- Frame* local_frame = root_->FindFrame(local_frame_id_); |
- CHECK(local_frame); |
- local_frame->UpdateFocus(); |
-} |
- |
-Frame* FrameTreeManager::GetLocalFrame() { |
- return root_->FindFrame(local_frame_id_); |
-} |
- |
-blink::WebLocalFrame* FrameTreeManager::GetLocalWebFrame() { |
- return GetLocalFrame()->web_frame()->toWebLocalFrame(); |
-} |
- |
-blink::WebView* FrameTreeManager::GetWebView() { |
- return root_->web_view(); |
-} |
- |
-blink::WebNavigationPolicy FrameTreeManager::DecidePolicyForNavigation( |
- Frame* frame, |
- const blink::WebFrameClient::NavigationPolicyInfo& info) { |
- if (info.frame == frame->web_frame() && frame == root_ && delegate_ && |
- delegate_->ShouldNavigateLocallyInMainFrame()) { |
- return info.defaultPolicy; |
- } |
- |
- if (CanNavigateLocally(info.frame, info.urlRequest)) |
- return info.defaultPolicy; |
- |
- // TODO(sky): this is wrong for subframes. In fact NavigatorHost should likely |
- // be merged with Frame. |
- if (navigator_host_.get()) { |
- mojo::URLRequestPtr url_request = mojo::URLRequest::From(info.urlRequest); |
- navigator_host_->RequestNavigate( |
- WebNavigationPolicyToNavigationTarget(info.defaultPolicy), |
- url_request.Pass()); |
- } |
- |
- return blink::WebNavigationPolicyIgnore; |
-} |
- |
-void FrameTreeManager::OnFrameDidFinishLoad(Frame* frame) { |
- if (delegate_) |
- delegate_->OnFrameDidFinishLoad(frame); |
-} |
- |
-void FrameTreeManager::OnFrameDidNavigateLocally(Frame* frame, |
- const std::string& url) { |
- if (navigator_host_.get() && frame == root_) |
- navigator_host_->DidNavigateLocally(url); |
-} |
- |
-void FrameTreeManager::OnFrameDestroyed(Frame* frame) { |
- if (frame == root_) { |
- root_ = nullptr; |
- // Shortly after this HTMLDocumentOOPIF should get ViewManagerDestroyed() |
- // and delete us. |
- } |
-} |
- |
-void FrameTreeManager::OnFrameDidChangeName(Frame* frame, |
- const blink::WebString& name) { |
- if (frame != GetLocalFrame()) |
- return; |
- |
- mojo::String mojo_name; |
- if (!name.isNull()) |
- mojo_name = name.utf8(); |
- server_->SetFrameName(mojo_name); |
-} |
- |
-void FrameTreeManager::OnConnect( |
- mandoline::FrameTreeServerPtr server, |
- mojo::Array<mandoline::FrameDataPtr> frame_data) { |
- // OnConnection() is only sent once, and has been received (by |
- // DocumentResourceWaiter) by the time we get here. |
- NOTREACHED(); |
-} |
- |
-void FrameTreeManager::LoadingStarted() { |
- server_->LoadingStarted(); |
-} |
- |
-void FrameTreeManager::LoadingStopped() { |
- server_->LoadingStopped(); |
-} |
- |
-void FrameTreeManager::ProgressChanged(double progress) { |
- server_->ProgressChanged(progress); |
-} |
- |
-void FrameTreeManager::OnFrameAdded(mandoline::FrameDataPtr frame_data) { |
- NOTIMPLEMENTED(); |
-} |
- |
-void FrameTreeManager::OnFrameRemoved(uint32_t frame_id) { |
- NOTIMPLEMENTED(); |
-} |
- |
-void FrameTreeManager::OnFrameNameChanged(uint32_t frame_id, |
- const mojo::String& name) { |
- Frame* frame = root_->FindFrame(frame_id); |
- if (frame) |
- frame->SetRemoteFrameName(name); |
-} |
- |
-} // namespace mojo |