| OLD | NEW |
| (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 | |
| OLD | NEW |