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

Side by Side Diff: components/html_viewer/html_widget.cc

Issue 1677293002: Bye bye Mandoline (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moar Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « components/html_viewer/html_widget.h ('k') | components/html_viewer/ime_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/html_viewer/html_widget.h"
6
7 #include <stdint.h>
8 #include <utility>
9
10 #include "base/command_line.h"
11 #include "components/html_viewer/blink_settings.h"
12 #include "components/html_viewer/global_state.h"
13 #include "components/html_viewer/ime_controller.h"
14 #include "components/html_viewer/stats_collection_controller.h"
15 #include "components/html_viewer/web_layer_tree_view_impl.h"
16 #include "components/html_viewer/web_storage_namespace_impl.h"
17 #include "components/mus/public/cpp/window.h"
18 #include "mojo/services/tracing/public/interfaces/tracing.mojom.h"
19 #include "mojo/shell/public/cpp/shell.h"
20 #include "third_party/WebKit/public/web/WebFrameWidget.h"
21 #include "third_party/WebKit/public/web/WebSettings.h"
22 #include "third_party/WebKit/public/web/WebView.h"
23 #include "ui/gfx/geometry/dip_util.h"
24
25 namespace html_viewer {
26 namespace {
27
28 scoped_ptr<WebLayerTreeViewImpl> CreateWebLayerTreeView(
29 GlobalState* global_state) {
30 return make_scoped_ptr(new WebLayerTreeViewImpl(
31 global_state->compositor_thread(),
32 global_state->gpu_memory_buffer_manager(),
33 global_state->raster_thread_helper()->task_graph_runner()));
34 }
35
36 void InitializeWebLayerTreeView(WebLayerTreeViewImpl* web_layer_tree_view,
37 mojo::Shell* shell,
38 mus::Window* window,
39 blink::WebWidget* widget) {
40 DCHECK(window);
41 mus::mojom::GpuPtr gpu_service;
42 shell->ConnectToService("mojo:mus", &gpu_service);
43 web_layer_tree_view->Initialize(std::move(gpu_service), window, widget);
44 }
45
46 void UpdateWebViewSizeFromViewSize(mus::Window* window,
47 blink::WebWidget* web_widget,
48 WebLayerTreeViewImpl* web_layer_tree_view) {
49 const gfx::Size size_in_pixels(window->bounds().size());
50 const gfx::Size size_in_dips = gfx::ConvertSizeToDIP(
51 window->viewport_metrics().device_pixel_ratio, size_in_pixels);
52 web_widget->resize(
53 blink::WebSize(size_in_dips.width(), size_in_dips.height()));
54 web_layer_tree_view->setViewportSize(size_in_pixels);
55 }
56
57 } // namespace
58
59 // HTMLWidgetRootRemote -------------------------------------------------------
60
61 HTMLWidgetRootRemote::HTMLWidgetRootRemote(GlobalState* global_state)
62 : web_view_(blink::WebView::create(this)) {
63 global_state->blink_settings()->ApplySettingsToWebView(web_view_);
64 }
65
66 HTMLWidgetRootRemote::~HTMLWidgetRootRemote() {}
67
68 blink::WebStorageNamespace*
69 HTMLWidgetRootRemote::createSessionStorageNamespace() {
70 return new WebStorageNamespaceImpl();
71 }
72
73 bool HTMLWidgetRootRemote::allowsBrokenNullLayerTreeView() const {
74 return true;
75 }
76
77 blink::WebWidget* HTMLWidgetRootRemote::GetWidget() {
78 return web_view_;
79 }
80
81 void HTMLWidgetRootRemote::OnWindowBoundsChanged(mus::Window* window) {}
82
83 // HTMLWidgetRootLocal --------------------------------------------------------
84
85 HTMLWidgetRootLocal::CreateParams::CreateParams(mojo::Shell* shell,
86 GlobalState* global_state,
87 mus::Window* window)
88 : shell(shell), global_state(global_state), window(window) {}
89
90 HTMLWidgetRootLocal::CreateParams::~CreateParams() {}
91
92 HTMLWidgetRootLocal::HTMLWidgetRootLocal(CreateParams* create_params)
93 : shell_(create_params->shell),
94 global_state_(create_params->global_state),
95 window_(create_params->window),
96 web_view_(nullptr) {
97 web_view_ = blink::WebView::create(this);
98 ime_controller_.reset(new ImeController(window_, web_view_));
99 // Creating the widget calls initializeLayerTreeView() to create the
100 // |web_layer_tree_view_impl_|. As we haven't yet assigned the |web_view_|
101 // we have to set it here.
102 if (web_layer_tree_view_impl_) {
103 InitializeWebLayerTreeView(web_layer_tree_view_impl_.get(), shell_, window_,
104 web_view_);
105 UpdateWebViewSizeFromViewSize(window_, web_view_,
106 web_layer_tree_view_impl_.get());
107 }
108 global_state_->blink_settings()->ApplySettingsToWebView(web_view_);
109 }
110
111 HTMLWidgetRootLocal::~HTMLWidgetRootLocal() {}
112
113 blink::WebStorageNamespace*
114 HTMLWidgetRootLocal::createSessionStorageNamespace() {
115 return new WebStorageNamespaceImpl();
116 }
117
118 void HTMLWidgetRootLocal::initializeLayerTreeView() {
119 web_layer_tree_view_impl_ = CreateWebLayerTreeView(global_state_);
120 }
121
122 blink::WebLayerTreeView* HTMLWidgetRootLocal::layerTreeView() {
123 return web_layer_tree_view_impl_.get();
124 }
125
126 void HTMLWidgetRootLocal::didMeaningfulLayout(
127 blink::WebMeaningfulLayout layout_type) {
128 static bool called = false;
129 if (!called && layout_type == blink::WebMeaningfulLayout::VisuallyNonEmpty) {
130 const int64_t ticks = base::TimeTicks::Now().ToInternalValue();
131 tracing::StartupPerformanceDataCollectorPtr collector =
132 StatsCollectionController::ConnectToDataCollector(shell_);
133 if (collector)
134 collector->SetFirstVisuallyNonEmptyLayoutTicks(ticks);
135 called = true;
136 }
137 }
138
139 void HTMLWidgetRootLocal::resetInputMethod() {
140 ime_controller_->ResetInputMethod();
141 }
142
143 void HTMLWidgetRootLocal::didHandleGestureEvent(
144 const blink::WebGestureEvent& event,
145 bool event_cancelled) {
146 ime_controller_->DidHandleGestureEvent(event, event_cancelled);
147 }
148
149 void HTMLWidgetRootLocal::didUpdateTextOfFocusedElementByNonUserInput() {
150 ime_controller_->DidUpdateTextOfFocusedElementByNonUserInput();
151 }
152
153 void HTMLWidgetRootLocal::showImeIfNeeded() {
154 ime_controller_->ShowImeIfNeeded();
155 }
156
157 blink::WebWidget* HTMLWidgetRootLocal::GetWidget() {
158 return web_view_;
159 }
160
161 void HTMLWidgetRootLocal::OnWindowBoundsChanged(mus::Window* window) {
162 UpdateWebViewSizeFromViewSize(window, web_view_,
163 web_layer_tree_view_impl_.get());
164 }
165
166 // HTMLWidgetLocalRoot --------------------------------------------------------
167
168 HTMLWidgetLocalRoot::HTMLWidgetLocalRoot(mojo::Shell* shell,
169 GlobalState* global_state,
170 mus::Window* window,
171 blink::WebLocalFrame* web_local_frame)
172 : shell_(shell), global_state_(global_state), web_frame_widget_(nullptr) {
173 web_frame_widget_ = blink::WebFrameWidget::create(this, web_local_frame);
174 ime_controller_.reset(new ImeController(window, web_frame_widget_));
175 // Creating the widget calls initializeLayerTreeView() to create the
176 // |web_layer_tree_view_impl_|. As we haven't yet assigned the
177 // |web_frame_widget_|
178 // we have to set it here.
179 if (web_layer_tree_view_impl_) {
180 InitializeWebLayerTreeView(web_layer_tree_view_impl_.get(), shell_, window,
181 web_frame_widget_);
182 UpdateWebViewSizeFromViewSize(window, web_frame_widget_,
183 web_layer_tree_view_impl_.get());
184 }
185 }
186
187 HTMLWidgetLocalRoot::~HTMLWidgetLocalRoot() {}
188
189 blink::WebWidget* HTMLWidgetLocalRoot::GetWidget() {
190 return web_frame_widget_;
191 }
192
193 void HTMLWidgetLocalRoot::OnWindowBoundsChanged(mus::Window* window) {
194 UpdateWebViewSizeFromViewSize(window, web_frame_widget_,
195 web_layer_tree_view_impl_.get());
196 }
197
198 void HTMLWidgetLocalRoot::initializeLayerTreeView() {
199 web_layer_tree_view_impl_ = CreateWebLayerTreeView(global_state_);
200 }
201
202 blink::WebLayerTreeView* HTMLWidgetLocalRoot::layerTreeView() {
203 return web_layer_tree_view_impl_.get();
204 }
205
206 void HTMLWidgetLocalRoot::resetInputMethod() {
207 ime_controller_->ResetInputMethod();
208 }
209
210 void HTMLWidgetLocalRoot::didHandleGestureEvent(
211 const blink::WebGestureEvent& event,
212 bool event_cancelled) {
213 ime_controller_->DidHandleGestureEvent(event, event_cancelled);
214 }
215
216 void HTMLWidgetLocalRoot::didUpdateTextOfFocusedElementByNonUserInput() {
217 ime_controller_->DidUpdateTextOfFocusedElementByNonUserInput();
218 }
219
220 void HTMLWidgetLocalRoot::showImeIfNeeded() {
221 ime_controller_->ShowImeIfNeeded();
222 }
223
224 } // namespace html_viewer
OLDNEW
« no previous file with comments | « components/html_viewer/html_widget.h ('k') | components/html_viewer/ime_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698