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

Unified Diff: components/html_viewer/frame.cc

Issue 1246053003: Renames html_viewer frame classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor cleanup Created 5 years, 5 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
« no previous file with comments | « components/html_viewer/frame.h ('k') | components/html_viewer/frame_tree_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/html_viewer/frame.cc
diff --git a/components/html_viewer/frame.cc b/components/html_viewer/frame.cc
deleted file mode 100644
index 616fecc42b5d44811178541733aa993508af3066..0000000000000000000000000000000000000000
--- a/components/html_viewer/frame.cc
+++ /dev/null
@@ -1,560 +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.h"
-
-#include <algorithm>
-
-#include "base/bind.h"
-#include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/thread_task_runner_handle.h"
-#include "components/html_viewer/ax_provider_impl.h"
-#include "components/html_viewer/blink_basic_type_converters.h"
-#include "components/html_viewer/blink_input_events_type_converters.h"
-#include "components/html_viewer/blink_url_request_type_converters.h"
-#include "components/html_viewer/frame_tree_manager.h"
-#include "components/html_viewer/geolocation_client_impl.h"
-#include "components/html_viewer/global_state.h"
-#include "components/html_viewer/media_factory.h"
-#include "components/html_viewer/touch_handler.h"
-#include "components/html_viewer/web_layer_impl.h"
-#include "components/html_viewer/web_layer_tree_view_impl.h"
-#include "components/html_viewer/web_storage_namespace_impl.h"
-#include "components/html_viewer/web_url_loader_impl.h"
-#include "components/view_manager/ids.h"
-#include "components/view_manager/public/cpp/view.h"
-#include "components/view_manager/public/cpp/view_manager.h"
-#include "components/view_manager/public/interfaces/surfaces.mojom.h"
-#include "mandoline/services/navigation/public/interfaces/navigation.mojom.h"
-#include "mojo/application/public/cpp/application_impl.h"
-#include "mojo/application/public/cpp/connect.h"
-#include "mojo/application/public/interfaces/shell.mojom.h"
-#include "mojo/converters/geometry/geometry_type_converters.h"
-#include "skia/ext/refptr.h"
-#include "third_party/WebKit/public/platform/Platform.h"
-#include "third_party/WebKit/public/platform/WebHTTPHeaderVisitor.h"
-#include "third_party/WebKit/public/platform/WebSize.h"
-#include "third_party/WebKit/public/web/WebConsoleMessage.h"
-#include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrameWidget.h"
-#include "third_party/WebKit/public/web/WebInputEvent.h"
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
-#include "third_party/WebKit/public/web/WebNavigationPolicy.h"
-#include "third_party/WebKit/public/web/WebRemoteFrame.h"
-#include "third_party/WebKit/public/web/WebRemoteFrameClient.h"
-#include "third_party/WebKit/public/web/WebScriptSource.h"
-#include "third_party/WebKit/public/web/WebSettings.h"
-#include "third_party/WebKit/public/web/WebView.h"
-#include "third_party/mojo/src/mojo/public/cpp/system/data_pipe.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "third_party/skia/include/core/SkDevice.h"
-#include "ui/gfx/geometry/dip_util.h"
-#include "ui/gfx/geometry/size.h"
-
-using mojo::AxProvider;
-using mojo::Rect;
-using mojo::ServiceProviderPtr;
-using mojo::URLResponsePtr;
-using mojo::View;
-using mojo::WeakBindToRequest;
-
-namespace html_viewer {
-namespace {
-
-void ConfigureSettings(blink::WebSettings* settings) {
- settings->setCookieEnabled(true);
- settings->setDefaultFixedFontSize(13);
- settings->setDefaultFontSize(16);
- settings->setLoadsImagesAutomatically(true);
- settings->setJavaScriptEnabled(true);
-}
-
-Frame* GetPreviousSibling(Frame* frame) {
- DCHECK(frame->parent());
- auto iter = std::find(frame->parent()->children().begin(),
- frame->parent()->children().end(), frame);
- return (iter == frame->parent()->children().begin()) ? nullptr : *(--iter);
-}
-
-} // namespace
-
-Frame::Frame(const Frame::CreateParams& params)
- : frame_tree_manager_(params.manager),
- parent_(params.parent),
- view_(nullptr),
- id_(params.id),
- web_frame_(nullptr),
- web_widget_(nullptr),
- scope_(blink::WebTreeScopeType::Document),
- weak_factory_(this) {
- if (parent_)
- parent_->children_.push_back(this);
-}
-
-void Frame::Init(mojo::View* local_view,
- const blink::WebString& remote_frame_name,
- const blink::WebString& remote_origin) {
- if (local_view->id() == id_)
- SetView(local_view);
-
- // TODO(sky): need to plumb through scope and other args correctly for frame
- // creation.
- if (!parent_) {
- CreateWebWidget();
- // This is the root of the tree (aka the main frame).
- // Expected order for creating webframes is:
- // . Create local webframe (first webframe must always be local).
- // . Set as main frame on WebView.
- // . Swap to remote (if not local).
- blink::WebLocalFrame* local_web_frame =
- blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, this);
- // We need to set the main frame before creating children so that state is
- // properly set up in blink.
- // TODO(sky): I don't like these casts.
- web_view()->setMainFrame(local_web_frame);
- const gfx::Size size_in_pixels(local_view->bounds().width,
- local_view->bounds().height);
- const gfx::Size size_in_dips = gfx::ConvertSizeToDIP(
- local_view->viewport_metrics().device_pixel_ratio, size_in_pixels);
- web_widget_->resize(size_in_dips);
- web_frame_ = local_web_frame;
- web_view()->setDeviceScaleFactor(global_state()->device_pixel_ratio());
- if (id_ != local_view->id()) {
- blink::WebRemoteFrame* remote_web_frame = blink::WebRemoteFrame::create(
- blink::WebTreeScopeType::Document, this);
- local_web_frame->swap(remote_web_frame);
- // local_web_frame->close();
- web_frame_ = remote_web_frame;
- }
- } else if (id_ == local_view->id()) {
- // Frame represents the local frame.
- Frame* previous_sibling = GetPreviousSibling(this);
- blink::WebFrame* previous_web_frame =
- previous_sibling ? previous_sibling->web_frame() : nullptr;
- DCHECK(!parent_->IsLocal());
- web_frame_ = parent_->web_frame()->toWebRemoteFrame()->createLocalChild(
- blink::WebTreeScopeType::Document, "", blink::WebSandboxFlags::None,
- this, previous_web_frame);
- CreateWebWidget();
- } else if (parent_->web_frame()->isWebLocalFrame()) {
- blink::WebLocalFrame* local_web_frame =
- blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, this);
- parent_->web_frame()->appendChild(local_web_frame);
- blink::WebRemoteFrame* remote_web_frame =
- blink::WebRemoteFrame::create(blink::WebTreeScopeType::Document, this);
- // remote_web_frame->swap(local_web_frame);
- local_web_frame->close();
- web_frame_ = remote_web_frame;
- } else {
- web_frame_ = parent_->web_frame()->toWebRemoteFrame()->createRemoteChild(
- blink::WebTreeScopeType::Document, remote_frame_name,
- blink::WebSandboxFlags::None, this);
- }
-
- if (!IsLocal()) {
- blink::WebRemoteFrame* remote_web_frame = web_frame_->toWebRemoteFrame();
- if (remote_web_frame) {
- remote_web_frame->setReplicatedName(remote_frame_name);
- remote_web_frame->setReplicatedOrigin(
- blink::WebSecurityOrigin::createFromString(remote_origin));
- }
- }
-}
-
-void Frame::Close() {
- if (web_widget_) {
- // Closing the widget implicitly detaches the frame.
- web_widget_->close();
- } else {
- web_frame_->detach();
- }
-}
-
-const Frame* Frame::FindFrame(uint32_t id) const {
- if (id == id_)
- return this;
-
- for (const Frame* child : children_) {
- const Frame* match = child->FindFrame(id);
- if (match)
- return match;
- }
- return nullptr;
-}
-
-blink::WebView* Frame::web_view() {
- return web_widget_ && web_widget_->isWebView()
- ? static_cast<blink::WebView*>(web_widget_)
- : nullptr;
-}
-
-Frame::~Frame() {
- DCHECK(children_.empty());
-
- if (parent_) {
- auto iter =
- std::find(parent_->children_.begin(), parent_->children_.end(), this);
- parent_->children_.erase(iter);
- }
- parent_ = nullptr;
-
- frame_tree_manager_->OnFrameDestroyed(this);
-
- if (view_) {
- view_->RemoveObserver(this);
- view_->Destroy();
- }
-}
-
-void Frame::SetRemoteFrameName(const mojo::String& name) {
- if (IsLocal())
- return;
-
- blink::WebRemoteFrame* remote_frame = web_frame_->toWebRemoteFrame();
- if (remote_frame)
- remote_frame->setReplicatedName(name.To<blink::WebString>());
-}
-
-bool Frame::IsLocal() const {
- return web_frame_->isWebLocalFrame();
-}
-
-void Frame::SetView(mojo::View* view) {
- DCHECK(!view_);
- view_ = view;
- view_->AddObserver(this);
-}
-
-void Frame::CreateWebWidget() {
- DCHECK(!web_widget_);
- if (parent_) {
- // TODO(sky): this isn't quite right. I should only have a WebFrameWidget
- // for local roots. And the cast to local fram definitely isn't right.
- web_widget_ =
- blink::WebFrameWidget::create(this, web_frame_->toWebLocalFrame());
- } else if (view_ && view_->id() == id_) {
- web_widget_ = blink::WebView::create(this);
- } else {
- web_widget_ = blink::WebView::create(nullptr);
- }
-
- // Creating the widget calls initializeLayerTreeView() to create the
- // |web_layer_tree_view_impl_|. As we haven't yet assigned the |web_widget_|
- // we have to set it here.
- if (web_layer_tree_view_impl_) {
- web_layer_tree_view_impl_->set_widget(web_widget_);
- web_layer_tree_view_impl_->set_view(view_);
- UpdateWebViewSizeFromViewSize();
- }
-
- if (web_view())
- ConfigureSettings(web_view()->settings());
-}
-
-void Frame::UpdateFocus() {
- if (!web_widget_ || !view_)
- return;
- const bool is_focused = view_ && view_->HasFocus();
- web_widget_->setFocus(is_focused);
- if (web_widget_->isWebView())
- static_cast<blink::WebView*>(web_widget_)->setIsActive(is_focused);
-}
-
-void Frame::UpdateWebViewSizeFromViewSize() {
- if (!web_widget_ || !view_)
- return;
-
- const gfx::Size size_in_pixels(view_->bounds().width, view_->bounds().height);
- const gfx::Size size_in_dips = gfx::ConvertSizeToDIP(
- view_->viewport_metrics().device_pixel_ratio, size_in_pixels);
- web_widget_->resize(
- blink::WebSize(size_in_dips.width(), size_in_dips.height()));
- web_layer_tree_view_impl_->setViewportSize(size_in_pixels);
-}
-
-void Frame::SwapToRemote(const blink::WebURLRequest& request) {
- DCHECK(IsLocal());
- mojo::URLRequestPtr url_request = mojo::URLRequest::From(request);
- view_->EmbedAllowingReembed(url_request.Pass());
-
- // TODO(sky): I tried swapping the frame types here, but that resulted in
- // the view never getting sized. Figure out why.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&Frame::FinishSwapToRemote, weak_factory_.GetWeakPtr()));
-}
-
-void Frame::FinishSwapToRemote() {
- if (web_frame_->isWebRemoteFrame())
- return; // We already did the swap.
-
- blink::WebRemoteFrame* remote_frame =
- blink::WebRemoteFrame::create(scope_, this);
- remote_frame->initializeFromFrame(web_frame_->toWebLocalFrame());
- // swap() ends up calling us back and we then close the frame.
- web_frame_->swap(remote_frame);
- web_layer_.reset(new WebLayerImpl(this));
- remote_frame->setRemoteWebLayer(web_layer_.get());
- web_frame_ = remote_frame;
-}
-
-Frame* Frame::FindFrameWithWebFrame(blink::WebFrame* web_frame) {
- if (web_frame_ == web_frame)
- return this;
- for (Frame* child_frame : children_) {
- Frame* result = child_frame->FindFrameWithWebFrame(web_frame);
- if (result)
- return result;
- }
- return nullptr;
-}
-
-void Frame::FrameDetachedImpl(blink::WebFrame* web_frame) {
- DCHECK_EQ(web_frame_, web_frame);
-
- while (!children_.empty()) {
- Frame* child = children_.front();
- child->Close();
- DCHECK(children_.empty() || children_.front() != child);
- }
-
- if (web_frame->parent())
- web_frame->parent()->removeChild(web_frame);
-
- delete this;
-}
-
-void Frame::OnViewBoundsChanged(View* view,
- const Rect& old_bounds,
- const Rect& new_bounds) {
- DCHECK_EQ(view, view_);
- UpdateWebViewSizeFromViewSize();
-}
-
-void Frame::OnViewDestroyed(View* view) {
- DCHECK_EQ(view, view_);
- view_->RemoveObserver(this);
- view_ = nullptr;
- Close();
-}
-
-void Frame::OnViewInputEvent(View* view, const mojo::EventPtr& event) {
- if (event->pointer_data) {
- // Blink expects coordintes to be in DIPs.
- event->pointer_data->x /= global_state()->device_pixel_ratio();
- event->pointer_data->y /= global_state()->device_pixel_ratio();
- event->pointer_data->screen_x /= global_state()->device_pixel_ratio();
- event->pointer_data->screen_y /= global_state()->device_pixel_ratio();
- }
-
- if (!touch_handler_ && web_widget_)
- touch_handler_.reset(new TouchHandler(web_widget_));
-
- if ((event->action == mojo::EVENT_TYPE_POINTER_DOWN ||
- event->action == mojo::EVENT_TYPE_POINTER_UP ||
- event->action == mojo::EVENT_TYPE_POINTER_CANCEL ||
- event->action == mojo::EVENT_TYPE_POINTER_MOVE) &&
- event->pointer_data->kind == mojo::POINTER_KIND_TOUCH) {
- touch_handler_->OnTouchEvent(*event);
- return;
- }
-
- if (!web_widget_)
- return;
-
- scoped_ptr<blink::WebInputEvent> web_event =
- event.To<scoped_ptr<blink::WebInputEvent>>();
- if (web_event)
- web_widget_->handleInputEvent(*web_event);
-}
-
-void Frame::OnViewFocusChanged(mojo::View* gained_focus,
- mojo::View* lost_focus) {
- UpdateFocus();
-}
-
-void Frame::initializeLayerTreeView() {
- mojo::URLRequestPtr request(mojo::URLRequest::New());
- request->url = mojo::String::From("mojo:surfaces_service");
- mojo::SurfacePtr surface;
- frame_tree_manager_->app()->ConnectToService(request.Pass(), &surface);
-
- // TODO(jamesr): Should be mojo:gpu_service
- mojo::URLRequestPtr request2(mojo::URLRequest::New());
- request2->url = mojo::String::From("mojo:view_manager");
- mojo::GpuPtr gpu_service;
- frame_tree_manager_->app()->ConnectToService(request2.Pass(), &gpu_service);
- web_layer_tree_view_impl_.reset(new WebLayerTreeViewImpl(
- global_state()->compositor_thread(),
- global_state()->gpu_memory_buffer_manager(),
- global_state()->raster_thread_helper()->task_graph_runner(),
- surface.Pass(), gpu_service.Pass()));
-}
-
-blink::WebLayerTreeView* Frame::layerTreeView() {
- return web_layer_tree_view_impl_.get();
-}
-
-blink::WebStorageNamespace* Frame::createSessionStorageNamespace() {
- return new WebStorageNamespaceImpl();
-}
-
-blink::WebMediaPlayer* Frame::createMediaPlayer(
- blink::WebLocalFrame* frame,
- const blink::WebURL& url,
- blink::WebMediaPlayerClient* client,
- blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
- blink::WebContentDecryptionModule* initial_cdm) {
- return global_state()->media_factory()->CreateMediaPlayer(
- frame, url, client, encrypted_client, initial_cdm,
- frame_tree_manager_->app()->shell());
-}
-
-blink::WebFrame* Frame::createChildFrame(blink::WebLocalFrame* parent,
- blink::WebTreeScopeType scope,
- const blink::WebString& frame_name,
- blink::WebSandboxFlags sandbox_flags) {
- DCHECK(IsLocal()); // Can't create children of remote frames.
- DCHECK_EQ(parent, web_frame_);
- DCHECK(view_); // If we're local we have to have a view.
- // Create the view that will house the frame now. We embed once we know the
- // url (see decidePolicyForNavigation()).
- mojo::View* child_view = view_->view_manager()->CreateView();
- child_view->SetVisible(true);
- view_->AddChild(child_view);
-
- // TODO(sky): the act of creating needs to notify the browser side, not
- // navigation.
- Frame::CreateParams params(frame_tree_manager_, this, child_view->id());
- Frame* child_frame = new Frame(params);
- child_frame->scope_ = scope;
-
- child_frame->SetView(child_view);
-
- blink::WebLocalFrame* child_web_frame =
- blink::WebLocalFrame::create(scope, child_frame);
- child_frame->web_frame_ = child_web_frame;
- parent->appendChild(child_web_frame);
- return child_web_frame;
-}
-
-void Frame::frameDetached(blink::WebFrame* web_frame,
- blink::WebFrameClient::DetachType type) {
- if (type == blink::WebFrameClient::DetachType::Swap) {
- web_frame->close();
- return;
- }
-
- DCHECK(type == blink::WebFrameClient::DetachType::Remove);
- FrameDetachedImpl(web_frame);
-}
-
-blink::WebCookieJar* Frame::cookieJar(blink::WebLocalFrame* frame) {
- // TODO(darin): Blink does not fallback to the Platform provided WebCookieJar.
- // Either it should, as it once did, or we should find another solution here.
- return blink::Platform::current()->cookieJar();
-}
-
-blink::WebNavigationPolicy Frame::decidePolicyForNavigation(
- const NavigationPolicyInfo& info) {
- if (parent_ && parent_->IsLocal()) {
- SwapToRemote(info.urlRequest);
- return blink::WebNavigationPolicyIgnore;
- }
-
- return frame_tree_manager_->DecidePolicyForNavigation(this, info);
-}
-
-void Frame::didAddMessageToConsole(const blink::WebConsoleMessage& message,
- const blink::WebString& source_name,
- unsigned source_line,
- const blink::WebString& stack_trace) {
- VLOG(1) << "[" << source_name.utf8() << "(" << source_line << ")] "
- << message.text.utf8();
-}
-
-void Frame::didFinishLoad(blink::WebLocalFrame* frame) {
- frame_tree_manager_->OnFrameDidFinishLoad(this);
-}
-
-void Frame::didNavigateWithinPage(blink::WebLocalFrame* frame,
- const blink::WebHistoryItem& history_item,
- blink::WebHistoryCommitType commit_type) {
- frame_tree_manager_->OnFrameDidNavigateLocally(
- this, history_item.urlString().utf8());
-}
-
-blink::WebGeolocationClient* Frame::geolocationClient() {
- if (!geolocation_client_impl_)
- geolocation_client_impl_.reset(new GeolocationClientImpl);
- return geolocation_client_impl_.get();
-}
-
-blink::WebEncryptedMediaClient* Frame::encryptedMediaClient() {
- return global_state()->media_factory()->GetEncryptedMediaClient();
-}
-
-void Frame::didStartLoading(bool to_different_document) {
- frame_tree_manager_->LoadingStarted();
-}
-
-void Frame::didStopLoading() {
- frame_tree_manager_->LoadingStopped();
-}
-
-void Frame::didChangeLoadProgress(double load_progress) {
- frame_tree_manager_->ProgressChanged(load_progress);
-}
-
-void Frame::didChangeName(blink::WebLocalFrame* frame,
- const blink::WebString& name) {
- frame_tree_manager_->OnFrameDidChangeName(this, name);
-}
-
-void Frame::frameDetached(blink::WebRemoteFrameClient::DetachType type) {
- if (type == blink::WebRemoteFrameClient::DetachType::Swap) {
- web_frame_->close();
- return;
- }
-
- DCHECK(type == blink::WebRemoteFrameClient::DetachType::Remove);
- FrameDetachedImpl(web_frame_);
-}
-
-void Frame::postMessageEvent(blink::WebLocalFrame* source_frame,
- blink::WebRemoteFrame* target_frame,
- blink::WebSecurityOrigin target_origin,
- blink::WebDOMMessageEvent event) {
- NOTIMPLEMENTED();
-}
-
-void Frame::initializeChildFrame(const blink::WebRect& frame_rect,
- float scale_factor) {
- // TODO(sky): frame_rect is in dips. Need to convert.
- mojo::Rect rect;
- rect.x = frame_rect.x;
- rect.y = frame_rect.y;
- rect.width = frame_rect.width;
- rect.height = frame_rect.height;
- view_->SetBounds(rect);
-}
-
-void Frame::navigate(const blink::WebURLRequest& request,
- bool should_replace_current_entry) {
- NOTIMPLEMENTED();
-}
-
-void Frame::reload(bool ignore_cache, bool is_client_redirect) {
- NOTIMPLEMENTED();
-}
-
-void Frame::forwardInputEvent(const blink::WebInputEvent* event) {
- NOTIMPLEMENTED();
-}
-
-} // namespace mojo
« no previous file with comments | « components/html_viewer/frame.h ('k') | components/html_viewer/frame_tree_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698