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

Side by Side Diff: mojo/services/html_viewer/html_document.cc

Issue 776553003: Fix html viewer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Follow review Created 6 years 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/services/html_viewer/html_document_view.h" 5 #include "mojo/services/html_viewer/html_document.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "base/thread_task_runner_handle.h" 13 #include "base/thread_task_runner_handle.h"
14 #include "mojo/public/cpp/application/connect.h" 14 #include "mojo/public/cpp/application/connect.h"
15 #include "mojo/public/cpp/system/data_pipe.h" 15 #include "mojo/public/cpp/system/data_pipe.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 if (request.extraData()) 78 if (request.extraData())
79 return true; 79 return true;
80 80
81 // Otherwise we don't know if we're the right app to handle this request. Ask 81 // Otherwise we don't know if we're the right app to handle this request. Ask
82 // host to do the navigation for us. 82 // host to do the navigation for us.
83 return false; 83 return false;
84 } 84 }
85 85
86 } // namespace 86 } // namespace
87 87
88 HTMLDocumentView::HTMLDocumentView( 88 HTMLDocument::HTMLDocument(
89 mojo::ServiceProviderPtr provider,
89 URLResponsePtr response, 90 URLResponsePtr response,
90 ShellPtr shell, 91 Shell* shell,
91 scoped_refptr<base::MessageLoopProxy> compositor_thread, 92 scoped_refptr<base::MessageLoopProxy> compositor_thread,
92 WebMediaPlayerFactory* web_media_player_factory) 93 WebMediaPlayerFactory* web_media_player_factory)
93 : response_(response.Pass()), 94 : response_(response.Pass()),
94 shell_(shell.Pass()), 95 shell_(shell),
95 web_view_(NULL), 96 web_view_(NULL),
96 root_(NULL), 97 root_(NULL),
97 view_manager_client_factory_(shell_.get(), this), 98 view_manager_client_factory_(shell_, this),
98 compositor_thread_(compositor_thread), 99 compositor_thread_(compositor_thread),
99 web_media_player_factory_(web_media_player_factory) { 100 web_media_player_factory_(web_media_player_factory) {
100 shell_.set_client(this); 101 exported_services_.AddService(this);
102 exported_services_.AddService(&view_manager_client_factory_);
103 WeakBindToPipe(&exported_services_, provider.PassMessagePipe());
101 } 104 }
102 105
103 HTMLDocumentView::~HTMLDocumentView() { 106 HTMLDocument::~HTMLDocument() {
104 STLDeleteElements(&ax_provider_impls_); 107 STLDeleteElements(&ax_provider_impls_);
105 108
106 if (web_view_) 109 if (web_view_)
107 web_view_->close(); 110 web_view_->close();
108 if (root_) 111 if (root_)
109 root_->RemoveObserver(this); 112 root_->RemoveObserver(this);
110 } 113 }
111 114
112 void HTMLDocumentView::AcceptConnection(const String& requestor_url, 115 void HTMLDocument::OnEmbed(
113 ServiceProviderPtr provider) {
114 exported_services_.AddService(this);
115 exported_services_.AddService(&view_manager_client_factory_);
116 WeakBindToPipe(&exported_services_, provider.PassMessagePipe());
117 Load(response_.Pass());
118 }
119
120 void HTMLDocumentView::Initialize(Array<String> args) {
121 }
122
123 void HTMLDocumentView::OnEmbed(
124 ViewManager* view_manager, 116 ViewManager* view_manager,
125 View* root, 117 View* root,
126 ServiceProviderImpl* embedee_service_provider_impl, 118 ServiceProviderImpl* embedee_service_provider_impl,
127 scoped_ptr<ServiceProvider> embedder_service_provider) { 119 scoped_ptr<ServiceProvider> embedder_service_provider) {
128 root_ = root; 120 root_ = root;
129 embedder_service_provider_ = embedder_service_provider.Pass(); 121 embedder_service_provider_ = embedder_service_provider.Pass();
130 navigator_host_.set_service_provider(embedder_service_provider_.get()); 122 navigator_host_.set_service_provider(embedder_service_provider_.get());
131 123
124 Load(response_.Pass());
xhwang 2014/12/12 01:50:14 This is breaking my local test. In my chromium che
125
132 blink::WebSize root_size(root_->bounds().width, root_->bounds().height); 126 blink::WebSize root_size(root_->bounds().width, root_->bounds().height);
133 web_view_->resize(root_size); 127 web_view_->resize(root_size);
134 web_layer_tree_view_impl_->setViewportSize(root_size); 128 web_layer_tree_view_impl_->setViewportSize(root_size);
135 web_layer_tree_view_impl_->set_view(root_); 129 web_layer_tree_view_impl_->set_view(root_);
136 root_->AddObserver(this); 130 root_->AddObserver(this);
137 } 131 }
138 132
139 void HTMLDocumentView::Create(ApplicationConnection* connection, 133 void HTMLDocument::Create(ApplicationConnection* connection,
140 InterfaceRequest<AxProvider> request) { 134 InterfaceRequest<AxProvider> request) {
141 if (!web_view_) 135 if (!web_view_)
142 return; 136 return;
143 ax_provider_impls_.insert( 137 ax_provider_impls_.insert(
144 WeakBindToRequest(new AxProviderImpl(web_view_), &request)); 138 WeakBindToRequest(new AxProviderImpl(web_view_), &request));
145 } 139 }
146 140
147 void HTMLDocumentView::OnViewManagerDisconnected(ViewManager* view_manager) { 141 void HTMLDocument::OnViewManagerDisconnected(ViewManager* view_manager) {
148 // TODO(aa): Need to figure out how shutdown works. 142 // TODO(aa): Need to figure out how shutdown works.
149 } 143 }
150 144
151 void HTMLDocumentView::Load(URLResponsePtr response) { 145 void HTMLDocument::Load(URLResponsePtr response) {
152 web_view_ = blink::WebView::create(this); 146 web_view_ = blink::WebView::create(this);
153 web_layer_tree_view_impl_->set_widget(web_view_); 147 web_layer_tree_view_impl_->set_widget(web_view_);
154 ConfigureSettings(web_view_->settings()); 148 ConfigureSettings(web_view_->settings());
155 web_view_->setMainFrame(blink::WebLocalFrame::create(this)); 149 web_view_->setMainFrame(blink::WebLocalFrame::create(this));
156 150
157 GURL url(response->url); 151 GURL url(response->url);
158 152
159 WebURLRequestExtraData* extra_data = new WebURLRequestExtraData; 153 WebURLRequestExtraData* extra_data = new WebURLRequestExtraData;
160 extra_data->synthetic_response = response.Pass(); 154 extra_data->synthetic_response = response.Pass();
161 155
162 blink::WebURLRequest web_request; 156 blink::WebURLRequest web_request;
163 web_request.initialize(); 157 web_request.initialize();
164 web_request.setURL(url); 158 web_request.setURL(url);
165 web_request.setExtraData(extra_data); 159 web_request.setExtraData(extra_data);
166 160
167 web_view_->mainFrame()->loadRequest(web_request); 161 web_view_->mainFrame()->loadRequest(web_request);
168 } 162 }
169 163
170 blink::WebStorageNamespace* HTMLDocumentView::createSessionStorageNamespace() { 164 blink::WebStorageNamespace* HTMLDocument::createSessionStorageNamespace() {
171 return new WebStorageNamespaceImpl(); 165 return new WebStorageNamespaceImpl();
172 } 166 }
173 167
174 void HTMLDocumentView::initializeLayerTreeView() { 168 void HTMLDocument::initializeLayerTreeView() {
175 ServiceProviderPtr surfaces_service_provider; 169 ServiceProviderPtr surfaces_service_provider;
176 shell_->ConnectToApplication("mojo:surfaces_service", 170 shell_->ConnectToApplication("mojo:surfaces_service",
177 GetProxy(&surfaces_service_provider)); 171 GetProxy(&surfaces_service_provider));
178 SurfacesServicePtr surfaces_service; 172 SurfacesServicePtr surfaces_service;
179 ConnectToService(surfaces_service_provider.get(), &surfaces_service); 173 ConnectToService(surfaces_service_provider.get(), &surfaces_service);
180 174
181 ServiceProviderPtr gpu_service_provider; 175 ServiceProviderPtr gpu_service_provider;
182 // TODO(jamesr): Should be mojo:gpu_service 176 // TODO(jamesr): Should be mojo:gpu_service
183 shell_->ConnectToApplication("mojo:native_viewport_service", 177 shell_->ConnectToApplication("mojo:native_viewport_service",
184 GetProxy(&gpu_service_provider)); 178 GetProxy(&gpu_service_provider));
185 GpuPtr gpu_service; 179 GpuPtr gpu_service;
186 ConnectToService(gpu_service_provider.get(), &gpu_service); 180 ConnectToService(gpu_service_provider.get(), &gpu_service);
187 web_layer_tree_view_impl_.reset(new WebLayerTreeViewImpl( 181 web_layer_tree_view_impl_.reset(new WebLayerTreeViewImpl(
188 compositor_thread_, surfaces_service.Pass(), gpu_service.Pass())); 182 compositor_thread_, surfaces_service.Pass(), gpu_service.Pass()));
189 } 183 }
190 184
191 blink::WebLayerTreeView* HTMLDocumentView::layerTreeView() { 185 blink::WebLayerTreeView* HTMLDocument::layerTreeView() {
192 return web_layer_tree_view_impl_.get(); 186 return web_layer_tree_view_impl_.get();
193 } 187 }
194 188
195 blink::WebMediaPlayer* HTMLDocumentView::createMediaPlayer( 189 blink::WebMediaPlayer* HTMLDocument::createMediaPlayer(
196 blink::WebLocalFrame* frame, 190 blink::WebLocalFrame* frame,
197 const blink::WebURL& url, 191 const blink::WebURL& url,
198 blink::WebMediaPlayerClient* client) { 192 blink::WebMediaPlayerClient* client) {
199 return web_media_player_factory_->CreateMediaPlayer( 193 return web_media_player_factory_->CreateMediaPlayer(frame, url, client,
200 frame, url, client, shell_.get()); 194 shell_);
201 } 195 }
202 196
203 blink::WebMediaPlayer* HTMLDocumentView::createMediaPlayer( 197 blink::WebMediaPlayer* HTMLDocument::createMediaPlayer(
204 blink::WebLocalFrame* frame, 198 blink::WebLocalFrame* frame,
205 const blink::WebURL& url, 199 const blink::WebURL& url,
206 blink::WebMediaPlayerClient* client, 200 blink::WebMediaPlayerClient* client,
207 blink::WebContentDecryptionModule* initial_cdm) { 201 blink::WebContentDecryptionModule* initial_cdm) {
208 return createMediaPlayer(frame, url, client); 202 return createMediaPlayer(frame, url, client);
209 } 203 }
210 204
211 blink::WebFrame* HTMLDocumentView::createChildFrame( 205 blink::WebFrame* HTMLDocument::createChildFrame(
212 blink::WebLocalFrame* parent, 206 blink::WebLocalFrame* parent,
213 const blink::WebString& frameName) { 207 const blink::WebString& frameName) {
214 blink::WebLocalFrame* web_frame = blink::WebLocalFrame::create(this); 208 blink::WebLocalFrame* web_frame = blink::WebLocalFrame::create(this);
215 parent->appendChild(web_frame); 209 parent->appendChild(web_frame);
216 return web_frame; 210 return web_frame;
217 } 211 }
218 212
219 void HTMLDocumentView::frameDetached(blink::WebFrame* frame) { 213 void HTMLDocument::frameDetached(blink::WebFrame* frame) {
220 if (frame->parent()) 214 if (frame->parent())
221 frame->parent()->removeChild(frame); 215 frame->parent()->removeChild(frame);
222 216
223 // |frame| is invalid after here. 217 // |frame| is invalid after here.
224 frame->close(); 218 frame->close();
225 } 219 }
226 220
227 blink::WebCookieJar* HTMLDocumentView::cookieJar(blink::WebLocalFrame* frame) { 221 blink::WebCookieJar* HTMLDocument::cookieJar(blink::WebLocalFrame* frame) {
228 // TODO(darin): Blink does not fallback to the Platform provided WebCookieJar. 222 // TODO(darin): Blink does not fallback to the Platform provided WebCookieJar.
229 // Either it should, as it once did, or we should find another solution here. 223 // Either it should, as it once did, or we should find another solution here.
230 return blink::Platform::current()->cookieJar(); 224 return blink::Platform::current()->cookieJar();
231 } 225 }
232 226
233 blink::WebNavigationPolicy HTMLDocumentView::decidePolicyForNavigation( 227 blink::WebNavigationPolicy HTMLDocument::decidePolicyForNavigation(
234 blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* data, 228 blink::WebLocalFrame* frame,
235 const blink::WebURLRequest& request, blink::WebNavigationType nav_type, 229 blink::WebDataSource::ExtraData* data,
236 blink::WebNavigationPolicy default_policy, bool is_redirect) { 230 const blink::WebURLRequest& request,
231 blink::WebNavigationType nav_type,
232 blink::WebNavigationPolicy default_policy,
233 bool is_redirect) {
237 if (CanNavigateLocally(frame, request)) 234 if (CanNavigateLocally(frame, request))
238 return default_policy; 235 return default_policy;
239 236
240 navigator_host_->RequestNavigate( 237 navigator_host_->RequestNavigate(
241 WebNavigationPolicyToNavigationTarget(default_policy), 238 WebNavigationPolicyToNavigationTarget(default_policy),
242 URLRequest::From(request).Pass()); 239 URLRequest::From(request).Pass());
243 240
244 return blink::WebNavigationPolicyIgnore; 241 return blink::WebNavigationPolicyIgnore;
245 } 242 }
246 243
247 void HTMLDocumentView::didAddMessageToConsole( 244 void HTMLDocument::didAddMessageToConsole(
248 const blink::WebConsoleMessage& message, 245 const blink::WebConsoleMessage& message,
249 const blink::WebString& source_name, 246 const blink::WebString& source_name,
250 unsigned source_line, 247 unsigned source_line,
251 const blink::WebString& stack_trace) { 248 const blink::WebString& stack_trace) {
252 } 249 }
253 250
254 void HTMLDocumentView::didNavigateWithinPage( 251 void HTMLDocument::didNavigateWithinPage(
255 blink::WebLocalFrame* frame, const blink::WebHistoryItem& history_item, 252 blink::WebLocalFrame* frame,
253 const blink::WebHistoryItem& history_item,
256 blink::WebHistoryCommitType commit_type) { 254 blink::WebHistoryCommitType commit_type) {
257 navigator_host_->DidNavigateLocally(history_item.urlString().utf8()); 255 navigator_host_->DidNavigateLocally(history_item.urlString().utf8());
258 } 256 }
259 257
260 void HTMLDocumentView::OnViewBoundsChanged(View* view, 258 void HTMLDocument::OnViewBoundsChanged(View* view,
261 const Rect& old_bounds, 259 const Rect& old_bounds,
262 const Rect& new_bounds) { 260 const Rect& new_bounds) {
263 DCHECK_EQ(view, root_); 261 DCHECK_EQ(view, root_);
264 web_view_->resize( 262 web_view_->resize(
265 blink::WebSize(view->bounds().width, view->bounds().height)); 263 blink::WebSize(view->bounds().width, view->bounds().height));
266 } 264 }
267 265
268 void HTMLDocumentView::OnViewDestroyed(View* view) { 266 void HTMLDocument::OnViewDestroyed(View* view) {
269 DCHECK_EQ(view, root_); 267 DCHECK_EQ(view, root_);
270 view->RemoveObserver(this); 268 root_ = nullptr;
271 root_ = NULL;
272 } 269 }
273 270
274 void HTMLDocumentView::OnViewInputEvent(View* view, const EventPtr& event) { 271 void HTMLDocument::OnViewInputEvent(View* view, const EventPtr& event) {
275 scoped_ptr<blink::WebInputEvent> web_event = 272 scoped_ptr<blink::WebInputEvent> web_event =
276 event.To<scoped_ptr<blink::WebInputEvent> >(); 273 event.To<scoped_ptr<blink::WebInputEvent>>();
277 if (web_event) 274 if (web_event)
278 web_view_->handleInputEvent(*web_event); 275 web_view_->handleInputEvent(*web_event);
279 } 276 }
280 277
281 } // namespace mojo 278 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698