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

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

Issue 469803005: Mojo: simple iframe support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
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_view.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/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 73
74 // Otherwise we don't know if we're the right app to handle this request. Ask 74 // Otherwise we don't know if we're the right app to handle this request. Ask
75 // host to do the navigation for us. 75 // host to do the navigation for us.
76 return false; 76 return false;
77 } 77 }
78 78
79 } // namespace 79 } // namespace
80 80
81 HTMLDocumentView::HTMLDocumentView(ServiceProvider* service_provider, 81 HTMLDocumentView::HTMLDocumentView(ServiceProvider* service_provider,
82 ViewManager* view_manager) 82 ViewManager* view_manager)
83 : view_manager_(view_manager), 83 : SimpleFrameClient(service_provider, 0),
84 view_manager_(view_manager),
84 web_view_(NULL), 85 web_view_(NULL),
85 root_(NULL), 86 root_(NULL),
86 repaint_pending_(false), 87 repaint_pending_(false),
87 navigator_host_(service_provider),
88 weak_factory_(this) { 88 weak_factory_(this) {
89 } 89 }
90 90
91 HTMLDocumentView::~HTMLDocumentView() { 91 HTMLDocumentView::~HTMLDocumentView() {
92 if (web_view_) 92 if (web_view_)
93 web_view_->close(); 93 web_view_->close();
94 if (root_) 94 if (root_)
95 root_->RemoveObserver(this); 95 root_->RemoveObserver(this);
96 } 96 }
97 97
98 void HTMLDocumentView::AttachToView(View* view) { 98 void HTMLDocumentView::AttachToView(View* view) {
99 root_ = view; 99 root_ = view;
100 root_id_ = root_->id();
100 root_->SetColor(SK_ColorCYAN); // Dummy background color. 101 root_->SetColor(SK_ColorCYAN); // Dummy background color.
101 102
102 web_view_ = blink::WebView::create(this); 103 web_view_ = blink::WebView::create(this);
103 ConfigureSettings(web_view_->settings()); 104 ConfigureSettings(web_view_->settings());
104 web_view_->setMainFrame(blink::WebLocalFrame::create(this)); 105 web_view_->setMainFrame(blink::WebLocalFrame::create(this));
105 web_view_->resize(root_->bounds().size()); 106 web_view_->resize(root_->bounds().size());
106 107
107 root_->AddObserver(this); 108 root_->AddObserver(this);
108 } 109 }
109 110
(...skipping 28 matching lines...) Expand all
138 139
139 bool HTMLDocumentView::allowsBrokenNullLayerTreeView() const { 140 bool HTMLDocumentView::allowsBrokenNullLayerTreeView() const {
140 // TODO(darin): Switch to using compositor bindings. 141 // TODO(darin): Switch to using compositor bindings.
141 // 142 //
142 // NOTE: Note to Blink maintainers, feel free to break this code if it is the 143 // NOTE: Note to Blink maintainers, feel free to break this code if it is the
143 // last NOT using compositor bindings and you want to delete this code path. 144 // last NOT using compositor bindings and you want to delete this code path.
144 // 145 //
145 return true; 146 return true;
146 } 147 }
147 148
148 blink::WebCookieJar* HTMLDocumentView::cookieJar(blink::WebLocalFrame* frame) { 149 SimpleFrameClient::SimpleFrameClient(ServiceProvider* service_provider,
150 Id root_id)
151 : service_provider_(service_provider),
152 navigator_host_(service_provider),
153 root_id_(root_id) {
154 }
155
156 SimpleFrameClient::~SimpleFrameClient() {
157 }
158
159 blink::WebFrame* SimpleFrameClient::createChildFrame(
160 blink::WebLocalFrame* parent,
161 const blink::WebString& frameName) {
162 // TODO(mpcomplete): What happens if root_ is destroyed and the child frames
163 // live on? Can that happen?
164 blink::WebLocalFrame* web_frame =
165 blink::WebLocalFrame::create(new SimpleFrameClient(service_provider_,
darin (slow to review) 2014/08/14 23:45:52 why do you need a new WebFrameClient instance per
Matt Perry 2014/08/15 00:40:04 Doh. I guess you don't. I assumed WebLocalFrame ex
166 root_id_));
167 parent->appendChild(web_frame);
168
169 return web_frame;
170 }
171
172 void SimpleFrameClient::didDisownOpener(blink::WebLocalFrame* frame) {
173 }
174
175 void SimpleFrameClient::frameDetached(blink::WebFrame* frame) {
176 bool is_subframe = !!frame->parent();
177
178 if (is_subframe)
179 frame->parent()->removeChild(frame);
180
181 // |frame| is invalid after here.
182 frame->close();
183
184 if (is_subframe) {
185 delete this;
186 // Object is invalid after this point.
187 }
188 }
189
190 void SimpleFrameClient::frameFocused() {
191 }
192
193 void SimpleFrameClient::willClose(blink::WebFrame* frame) {
194 }
195
196 blink::WebCookieJar* SimpleFrameClient::cookieJar(blink::WebLocalFrame* frame) {
149 // TODO(darin): Blink does not fallback to the Platform provided WebCookieJar. 197 // TODO(darin): Blink does not fallback to the Platform provided WebCookieJar.
150 // Either it should, as it once did, or we should find another solution here. 198 // Either it should, as it once did, or we should find another solution here.
151 return blink::Platform::current()->cookieJar(); 199 return blink::Platform::current()->cookieJar();
152 } 200 }
153 201
154 blink::WebNavigationPolicy HTMLDocumentView::decidePolicyForNavigation( 202 blink::WebNavigationPolicy SimpleFrameClient::decidePolicyForNavigation(
155 blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* data, 203 blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* data,
156 const blink::WebURLRequest& request, blink::WebNavigationType nav_type, 204 const blink::WebURLRequest& request, blink::WebNavigationType nav_type,
157 blink::WebNavigationPolicy default_policy, bool is_redirect) { 205 blink::WebNavigationPolicy default_policy, bool is_redirect) {
158 if (CanNavigateLocally(frame, request)) 206 if (CanNavigateLocally(frame, request))
159 return default_policy; 207 return default_policy;
160 208
161 NavigationDetailsPtr nav_details(NavigationDetails::New()); 209 NavigationDetailsPtr nav_details(NavigationDetails::New());
162 nav_details->request = URLRequest::From(request); 210 nav_details->request = URLRequest::From(request);
163 211
164 navigator_host_->RequestNavigate( 212 navigator_host_->RequestNavigate(
165 root_->id(), 213 root_id_,
166 WebNavigationPolicyToNavigationTarget(default_policy), 214 WebNavigationPolicyToNavigationTarget(default_policy),
167 nav_details.Pass()); 215 nav_details.Pass());
168 216
169 return blink::WebNavigationPolicyIgnore; 217 return blink::WebNavigationPolicyIgnore;
170 } 218 }
171 219
172 void HTMLDocumentView::didAddMessageToConsole( 220 void SimpleFrameClient::didAddMessageToConsole(
173 const blink::WebConsoleMessage& message, 221 const blink::WebConsoleMessage& message,
174 const blink::WebString& source_name, 222 const blink::WebString& source_name,
175 unsigned source_line, 223 unsigned source_line,
176 const blink::WebString& stack_trace) { 224 const blink::WebString& stack_trace) {
177 } 225 }
178 226
179 void HTMLDocumentView::didNavigateWithinPage( 227 void SimpleFrameClient::didNavigateWithinPage(
180 blink::WebLocalFrame* frame, const blink::WebHistoryItem& history_item, 228 blink::WebLocalFrame* frame, const blink::WebHistoryItem& history_item,
181 blink::WebHistoryCommitType commit_type) { 229 blink::WebHistoryCommitType commit_type) {
182 navigator_host_->DidNavigateLocally(root_->id(), 230 navigator_host_->DidNavigateLocally(root_id_,
183 history_item.urlString().utf8()); 231 history_item.urlString().utf8());
184 } 232 }
185 233
186 void HTMLDocumentView::OnViewBoundsChanged(View* view, 234 void HTMLDocumentView::OnViewBoundsChanged(View* view,
187 const gfx::Rect& old_bounds, 235 const gfx::Rect& old_bounds,
188 const gfx::Rect& new_bounds) { 236 const gfx::Rect& new_bounds) {
189 DCHECK_EQ(view, root_); 237 DCHECK_EQ(view, root_);
190 web_view_->resize(view->bounds().size()); 238 web_view_->resize(view->bounds().size());
191 } 239 }
192 240
193 void HTMLDocumentView::OnViewDestroyed(View* view) { 241 void HTMLDocumentView::OnViewDestroyed(View* view) {
194 DCHECK_EQ(view, root_); 242 DCHECK_EQ(view, root_);
195 view->RemoveObserver(this); 243 view->RemoveObserver(this);
196 root_ = NULL; 244 root_ = NULL;
245 root_id_ = 0;
197 } 246 }
198 247
199 void HTMLDocumentView::OnViewInputEvent(View* view, const EventPtr& event) { 248 void HTMLDocumentView::OnViewInputEvent(View* view, const EventPtr& event) {
200 scoped_ptr<blink::WebInputEvent> web_event = 249 scoped_ptr<blink::WebInputEvent> web_event =
201 TypeConverter<EventPtr, scoped_ptr<blink::WebInputEvent> >::ConvertTo( 250 TypeConverter<EventPtr, scoped_ptr<blink::WebInputEvent> >::ConvertTo(
202 event); 251 event);
203 if (web_event) 252 if (web_event)
204 web_view_->handleInputEvent(*web_event); 253 web_view_->handleInputEvent(*web_event);
205 } 254 }
206 255
207 void HTMLDocumentView::Repaint() { 256 void HTMLDocumentView::Repaint() {
208 repaint_pending_ = false; 257 repaint_pending_ = false;
209 258
210 web_view_->animate(0.0); 259 web_view_->animate(0.0);
211 web_view_->layout(); 260 web_view_->layout();
212 261
213 int width = web_view_->size().width; 262 int width = web_view_->size().width;
214 int height = web_view_->size().height; 263 int height = web_view_->size().height;
215 264
216 skia::RefPtr<SkCanvas> canvas = skia::AdoptRef(SkCanvas::NewRaster( 265 skia::RefPtr<SkCanvas> canvas = skia::AdoptRef(SkCanvas::NewRaster(
217 SkImageInfo::MakeN32(width, height, kOpaque_SkAlphaType))); 266 SkImageInfo::MakeN32(width, height, kOpaque_SkAlphaType)));
218 267
219 web_view_->paint(canvas.get(), gfx::Rect(0, 0, width, height)); 268 web_view_->paint(canvas.get(), gfx::Rect(0, 0, width, height));
220 269
221 root_->SetContents(canvas->getDevice()->accessBitmap(false)); 270 root_->SetContents(canvas->getDevice()->accessBitmap(false));
222 } 271 }
223 272
224 } // namespace mojo 273 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698