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

Side by Side Diff: components/web_view/frame.cc

Issue 1548203002: Convert Pass()→std::move() in //components/[n-z]* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix bad headers Created 4 years, 12 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 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 "components/web_view/frame.h" 5 #include "components/web_view/frame.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8
9 #include <algorithm> 8 #include <algorithm>
9 #include <utility>
10 10
11 #include "base/auto_reset.h" 11 #include "base/auto_reset.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "base/trace_event/trace_event.h" 15 #include "base/trace_event/trace_event.h"
16 #include "components/mus/public/cpp/window.h" 16 #include "components/mus/public/cpp/window.h"
17 #include "components/mus/public/cpp/window_property.h" 17 #include "components/mus/public/cpp/window_property.h"
18 #include "components/web_view/frame_tree.h" 18 #include "components/web_view/frame_tree.h"
19 #include "components/web_view/frame_tree_delegate.h" 19 #include "components/web_view/frame_tree_delegate.h"
(...skipping 17 matching lines...) Expand all
37 const uint32_t kNoParentId = 0u; 37 const uint32_t kNoParentId = 0u;
38 const mus::ConnectionSpecificId kInvalidConnectionId = 0u; 38 const mus::ConnectionSpecificId kInvalidConnectionId = 0u;
39 39
40 mojom::FrameDataPtr FrameToFrameData(const Frame* frame) { 40 mojom::FrameDataPtr FrameToFrameData(const Frame* frame) {
41 mojom::FrameDataPtr frame_data(mojom::FrameData::New()); 41 mojom::FrameDataPtr frame_data(mojom::FrameData::New());
42 frame_data->frame_id = frame->id(); 42 frame_data->frame_id = frame->id();
43 frame_data->parent_id = frame->parent() ? frame->parent()->id() : kNoParentId; 43 frame_data->parent_id = frame->parent() ? frame->parent()->id() : kNoParentId;
44 frame_data->client_properties = 44 frame_data->client_properties =
45 mojo::Map<mojo::String, mojo::Array<uint8_t>>::From( 45 mojo::Map<mojo::String, mojo::Array<uint8_t>>::From(
46 frame->client_properties()); 46 frame->client_properties());
47 return frame_data.Pass(); 47 return frame_data;
48 } 48 }
49 49
50 } // namespace 50 } // namespace
51 51
52 struct Frame::FrameUserDataAndBinding { 52 struct Frame::FrameUserDataAndBinding {
53 scoped_ptr<FrameUserData> user_data; 53 scoped_ptr<FrameUserData> user_data;
54 scoped_ptr<mojo::Binding<mojom::Frame>> frame_binding; 54 scoped_ptr<mojo::Binding<mojom::Frame>> frame_binding;
55 }; 55 };
56 56
57 Frame::Frame(FrameTree* tree, 57 Frame::Frame(FrameTree* tree,
58 Window* window, 58 Window* window,
59 uint32_t frame_id, 59 uint32_t frame_id,
60 uint32_t app_id, 60 uint32_t app_id,
61 WindowOwnership window_ownership, 61 WindowOwnership window_ownership,
62 mojom::FrameClient* frame_client, 62 mojom::FrameClient* frame_client,
63 scoped_ptr<FrameUserData> user_data, 63 scoped_ptr<FrameUserData> user_data,
64 const ClientPropertyMap& client_properties) 64 const ClientPropertyMap& client_properties)
65 : tree_(tree), 65 : tree_(tree),
66 window_(nullptr), 66 window_(nullptr),
67 embedded_connection_id_(kInvalidConnectionId), 67 embedded_connection_id_(kInvalidConnectionId),
68 id_(frame_id), 68 id_(frame_id),
69 app_id_(app_id), 69 app_id_(app_id),
70 parent_(nullptr), 70 parent_(nullptr),
71 window_ownership_(window_ownership), 71 window_ownership_(window_ownership),
72 user_data_(user_data.Pass()), 72 user_data_(std::move(user_data)),
73 frame_client_(frame_client), 73 frame_client_(frame_client),
74 loading_(false), 74 loading_(false),
75 progress_(0.f), 75 progress_(0.f),
76 client_properties_(client_properties), 76 client_properties_(client_properties),
77 waiting_for_on_will_navigate_ack_(false), 77 waiting_for_on_will_navigate_ack_(false),
78 embed_weak_ptr_factory_(this), 78 embed_weak_ptr_factory_(this),
79 navigate_weak_ptr_factory_(this) { 79 navigate_weak_ptr_factory_(this) {
80 if (window) 80 if (window)
81 SetWindow(window); 81 SetWindow(window);
82 } 82 }
(...skipping 23 matching lines...) Expand all
106 // add before OnConnect(). 106 // add before OnConnect().
107 base::AutoReset<mojom::FrameClient*> frame_client_resetter(&frame_client_, 107 base::AutoReset<mojom::FrameClient*> frame_client_resetter(&frame_client_,
108 nullptr); 108 nullptr);
109 if (parent) 109 if (parent)
110 parent->Add(this); 110 parent->Add(this);
111 } 111 }
112 112
113 const ClientType client_type = frame_request.is_pending() 113 const ClientType client_type = frame_request.is_pending()
114 ? ClientType::NEW_CHILD_FRAME 114 ? ClientType::NEW_CHILD_FRAME
115 : ClientType::EXISTING_FRAME_NEW_APP; 115 : ClientType::EXISTING_FRAME_NEW_APP;
116 InitClient(client_type, nullptr, window_tree_client.Pass(), 116 InitClient(client_type, nullptr, std::move(window_tree_client),
117 frame_request.Pass(), navigation_start_time); 117 std::move(frame_request), navigation_start_time);
118 118
119 tree_->delegate_->DidCreateFrame(this); 119 tree_->delegate_->DidCreateFrame(this);
120 120
121 DVLOG(2) << "Frame id=" << id_ << " parent=" << (parent_ ? parent_->id_ : 0) 121 DVLOG(2) << "Frame id=" << id_ << " parent=" << (parent_ ? parent_->id_ : 0)
122 << " app_id=" << app_id_ << " this=" << this; 122 << " app_id=" << app_id_ << " this=" << this;
123 } 123 }
124 124
125 // static 125 // static
126 Frame* Frame::FindFirstFrameAncestor(Window* window) { 126 Frame* Frame::FindFirstFrameAncestor(Window* window) {
127 while (window && !window->GetLocalProperty(kFrame)) 127 while (window && !window->GetLocalProperty(kFrame))
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 for (const Frame* child : children_) 164 for (const Frame* child : children_)
165 progress += child->GatherProgress(frame_count); 165 progress += child->GatherProgress(frame_count);
166 return progress_; 166 return progress_;
167 } 167 }
168 168
169 void Frame::Find(int32_t request_id, 169 void Frame::Find(int32_t request_id,
170 const mojo::String& search_text, 170 const mojo::String& search_text,
171 mojom::FindOptionsPtr options, 171 mojom::FindOptionsPtr options,
172 bool wrap_within_frame, 172 bool wrap_within_frame,
173 const FindCallback& callback) { 173 const FindCallback& callback) {
174 frame_client_->Find(request_id, search_text, options.Pass(), 174 frame_client_->Find(request_id, search_text, std::move(options),
175 wrap_within_frame, callback); 175 wrap_within_frame, callback);
176 } 176 }
177 177
178 void Frame::StopFinding(bool clear_selection) { 178 void Frame::StopFinding(bool clear_selection) {
179 frame_client_->StopFinding(clear_selection); 179 frame_client_->StopFinding(clear_selection);
180 } 180 }
181 181
182 void Frame::HighlightFindResults(int32_t request_id, 182 void Frame::HighlightFindResults(int32_t request_id,
183 const mojo::String& search_text, 183 const mojo::String& search_text,
184 mojom::FindOptionsPtr options, 184 mojom::FindOptionsPtr options,
185 bool reset) { 185 bool reset) {
186 frame_client_->HighlightFindResults(request_id, search_text, options.Pass(), 186 frame_client_->HighlightFindResults(request_id, search_text,
187 reset); 187 std::move(options), reset);
188 } 188 }
189 189
190 void Frame::StopHighlightingFindResults() { 190 void Frame::StopHighlightingFindResults() {
191 frame_client_->StopHighlightingFindResults(); 191 frame_client_->StopHighlightingFindResults();
192 } 192 }
193 193
194 void Frame::InitClient(ClientType client_type, 194 void Frame::InitClient(ClientType client_type,
195 scoped_ptr<FrameUserDataAndBinding> data_and_binding, 195 scoped_ptr<FrameUserDataAndBinding> data_and_binding,
196 mus::mojom::WindowTreeClientPtr window_tree_client, 196 mus::mojom::WindowTreeClientPtr window_tree_client,
197 mojo::InterfaceRequest<mojom::Frame> frame_request, 197 mojo::InterfaceRequest<mojom::Frame> frame_request,
198 base::TimeTicks navigation_start_time) { 198 base::TimeTicks navigation_start_time) {
199 if (client_type == ClientType::EXISTING_FRAME_NEW_APP && window_tree_client) { 199 if (client_type == ClientType::EXISTING_FRAME_NEW_APP && window_tree_client) {
200 embedded_connection_id_ = kInvalidConnectionId; 200 embedded_connection_id_ = kInvalidConnectionId;
201 embed_weak_ptr_factory_.InvalidateWeakPtrs(); 201 embed_weak_ptr_factory_.InvalidateWeakPtrs();
202 window_->Embed( 202 window_->Embed(
203 window_tree_client.Pass(), 203 std::move(window_tree_client),
204 mus::mojom::WindowTree::ACCESS_POLICY_DEFAULT, 204 mus::mojom::WindowTree::ACCESS_POLICY_DEFAULT,
205 base::Bind(&Frame::OnEmbedAck, embed_weak_ptr_factory_.GetWeakPtr())); 205 base::Bind(&Frame::OnEmbedAck, embed_weak_ptr_factory_.GetWeakPtr()));
206 } 206 }
207 207
208 if (client_type == ClientType::NEW_CHILD_FRAME) { 208 if (client_type == ClientType::NEW_CHILD_FRAME) {
209 // Don't install an error handler. We allow for the target to only 209 // Don't install an error handler. We allow for the target to only
210 // implement WindowTreeClient. 210 // implement WindowTreeClient.
211 // This frame (and client) was created by an existing FrameClient. There 211 // This frame (and client) was created by an existing FrameClient. There
212 // is no need to send it OnConnect(). 212 // is no need to send it OnConnect().
213 frame_binding_.reset( 213 frame_binding_.reset(
214 new mojo::Binding<mojom::Frame>(this, frame_request.Pass())); 214 new mojo::Binding<mojom::Frame>(this, std::move(frame_request)));
215 frame_client_->OnConnect( 215 frame_client_->OnConnect(
216 nullptr, tree_->change_id(), id_, mojom::WINDOW_CONNECT_TYPE_USE_NEW, 216 nullptr, tree_->change_id(), id_, mojom::WINDOW_CONNECT_TYPE_USE_NEW,
217 mojo::Array<mojom::FrameDataPtr>(), 217 mojo::Array<mojom::FrameDataPtr>(),
218 navigation_start_time.ToInternalValue(), 218 navigation_start_time.ToInternalValue(),
219 base::Bind(&OnConnectAck, base::Passed(&data_and_binding))); 219 base::Bind(&OnConnectAck, base::Passed(&data_and_binding)));
220 } else { 220 } else {
221 std::vector<const Frame*> frames; 221 std::vector<const Frame*> frames;
222 tree_->root()->BuildFrameTree(&frames); 222 tree_->root()->BuildFrameTree(&frames);
223 223
224 mojo::Array<mojom::FrameDataPtr> array(frames.size()); 224 mojo::Array<mojom::FrameDataPtr> array(frames.size());
225 for (size_t i = 0; i < frames.size(); ++i) 225 for (size_t i = 0; i < frames.size(); ++i)
226 array[i] = FrameToFrameData(frames[i]).Pass(); 226 array[i] = FrameToFrameData(frames[i]);
227 227
228 mojom::FramePtr frame_ptr; 228 mojom::FramePtr frame_ptr;
229 // Don't install an error handler. We allow for the target to only 229 // Don't install an error handler. We allow for the target to only
230 // implement WindowTreeClient. 230 // implement WindowTreeClient.
231 frame_binding_.reset( 231 frame_binding_.reset(
232 new mojo::Binding<mojom::Frame>(this, GetProxy(&frame_ptr).Pass())); 232 new mojo::Binding<mojom::Frame>(this, GetProxy(&frame_ptr)));
233 frame_client_->OnConnect( 233 frame_client_->OnConnect(
234 frame_ptr.Pass(), tree_->change_id(), id_, 234 std::move(frame_ptr), tree_->change_id(), id_,
235 client_type == ClientType::EXISTING_FRAME_SAME_APP 235 client_type == ClientType::EXISTING_FRAME_SAME_APP
236 ? mojom::WINDOW_CONNECT_TYPE_USE_EXISTING 236 ? mojom::WINDOW_CONNECT_TYPE_USE_EXISTING
237 : mojom::WINDOW_CONNECT_TYPE_USE_NEW, 237 : mojom::WINDOW_CONNECT_TYPE_USE_NEW,
238 array.Pass(), navigation_start_time.ToInternalValue(), 238 std::move(array), navigation_start_time.ToInternalValue(),
239 base::Bind(&OnConnectAck, base::Passed(&data_and_binding))); 239 base::Bind(&OnConnectAck, base::Passed(&data_and_binding)));
240 tree_->delegate_->DidStartNavigation(this); 240 tree_->delegate_->DidStartNavigation(this);
241 241
242 // We need |embedded_connection_id_| is order to validate requests to 242 // We need |embedded_connection_id_| is order to validate requests to
243 // create a child frame (OnCreatedFrame()). Pause incoming methods until 243 // create a child frame (OnCreatedFrame()). Pause incoming methods until
244 // we get the id to prevent race conditions. 244 // we get the id to prevent race conditions.
245 if (embedded_connection_id_ == kInvalidConnectionId) 245 if (embedded_connection_id_ == kInvalidConnectionId)
246 frame_binding_->PauseIncomingMethodCallProcessing(); 246 frame_binding_->PauseIncomingMethodCallProcessing();
247 } 247 }
248 } 248 }
(...skipping 11 matching lines...) Expand all
260 delete children_[0]; 260 delete children_[0];
261 261
262 ClientType client_type = !window_tree_client 262 ClientType client_type = !window_tree_client
263 ? ClientType::EXISTING_FRAME_SAME_APP 263 ? ClientType::EXISTING_FRAME_SAME_APP
264 : ClientType::EXISTING_FRAME_NEW_APP; 264 : ClientType::EXISTING_FRAME_NEW_APP;
265 scoped_ptr<FrameUserDataAndBinding> data_and_binding; 265 scoped_ptr<FrameUserDataAndBinding> data_and_binding;
266 266
267 if (client_type == ClientType::EXISTING_FRAME_SAME_APP) { 267 if (client_type == ClientType::EXISTING_FRAME_SAME_APP) {
268 // See comment in InitClient() for details. 268 // See comment in InitClient() for details.
269 data_and_binding.reset(new FrameUserDataAndBinding); 269 data_and_binding.reset(new FrameUserDataAndBinding);
270 data_and_binding->user_data = user_data_.Pass(); 270 data_and_binding->user_data = std::move(user_data_);
271 data_and_binding->frame_binding = frame_binding_.Pass(); 271 data_and_binding->frame_binding = std::move(frame_binding_);
272 } else { 272 } else {
273 loading_ = false; 273 loading_ = false;
274 progress_ = 0.f; 274 progress_ = 0.f;
275 } 275 }
276 276
277 user_data_ = user_data.Pass(); 277 user_data_ = std::move(user_data);
278 frame_client_ = frame_client; 278 frame_client_ = frame_client;
279 frame_binding_.reset(); 279 frame_binding_.reset();
280 app_id_ = app_id; 280 app_id_ = app_id;
281 281
282 InitClient(client_type, data_and_binding.Pass(), window_tree_client.Pass(), 282 InitClient(client_type, std::move(data_and_binding),
283 nullptr, navigation_start_time); 283 std::move(window_tree_client), nullptr, navigation_start_time);
284 } 284 }
285 285
286 void Frame::OnEmbedAck(bool success, mus::ConnectionSpecificId connection_id) { 286 void Frame::OnEmbedAck(bool success, mus::ConnectionSpecificId connection_id) {
287 if (success) 287 if (success)
288 embedded_connection_id_ = connection_id; 288 embedded_connection_id_ = connection_id;
289 if (frame_binding_->is_bound()) 289 if (frame_binding_->is_bound())
290 frame_binding_->ResumeIncomingMethodCallProcessing(); 290 frame_binding_->ResumeIncomingMethodCallProcessing();
291 } 291 }
292 292
293 void Frame::OnWillNavigateAck( 293 void Frame::OnWillNavigateAck(
294 mojom::FrameClient* frame_client, 294 mojom::FrameClient* frame_client,
295 scoped_ptr<FrameUserData> user_data, 295 scoped_ptr<FrameUserData> user_data,
296 mus::mojom::WindowTreeClientPtr window_tree_client, 296 mus::mojom::WindowTreeClientPtr window_tree_client,
297 uint32_t app_id, 297 uint32_t app_id,
298 base::TimeTicks navigation_start_time) { 298 base::TimeTicks navigation_start_time) {
299 DCHECK(waiting_for_on_will_navigate_ack_); 299 DCHECK(waiting_for_on_will_navigate_ack_);
300 DVLOG(2) << "Frame::OnWillNavigateAck id=" << id_; 300 DVLOG(2) << "Frame::OnWillNavigateAck id=" << id_;
301 waiting_for_on_will_navigate_ack_ = false; 301 waiting_for_on_will_navigate_ack_ = false;
302 ChangeClient(frame_client, user_data.Pass(), window_tree_client.Pass(), 302 ChangeClient(frame_client, std::move(user_data),
303 app_id, navigation_start_time); 303 std::move(window_tree_client), app_id, navigation_start_time);
304 if (pending_navigate_.get()) 304 if (pending_navigate_.get())
305 StartNavigate(pending_navigate_.Pass()); 305 StartNavigate(std::move(pending_navigate_));
306 } 306 }
307 307
308 void Frame::SetWindow(mus::Window* window) { 308 void Frame::SetWindow(mus::Window* window) {
309 DCHECK(!window_); 309 DCHECK(!window_);
310 DCHECK_EQ(id_, window->id()); 310 DCHECK_EQ(id_, window->id());
311 window_ = window; 311 window_ = window;
312 window_->SetLocalProperty(kFrame, this); 312 window_->SetLocalProperty(kFrame, this);
313 window_->AddObserver(this); 313 window_->AddObserver(this);
314 if (pending_navigate_.get()) 314 if (pending_navigate_.get())
315 StartNavigate(pending_navigate_.Pass()); 315 StartNavigate(std::move(pending_navigate_));
316 } 316 }
317 317
318 void Frame::BuildFrameTree(std::vector<const Frame*>* frames) const { 318 void Frame::BuildFrameTree(std::vector<const Frame*>* frames) const {
319 frames->push_back(this); 319 frames->push_back(this);
320 for (const Frame* frame : children_) 320 for (const Frame* frame : children_)
321 frame->BuildFrameTree(frames); 321 frame->BuildFrameTree(frames);
322 } 322 }
323 323
324 void Frame::Add(Frame* node) { 324 void Frame::Add(Frame* node) {
325 DCHECK(!node->parent_); 325 DCHECK(!node->parent_);
(...skipping 11 matching lines...) Expand all
337 node->parent_ = nullptr; 337 node->parent_ = nullptr;
338 children_.erase(iter); 338 children_.erase(iter);
339 339
340 tree_->root()->NotifyRemoved(this, node, tree_->AdvanceChangeID()); 340 tree_->root()->NotifyRemoved(this, node, tree_->AdvanceChangeID());
341 } 341 }
342 342
343 void Frame::StartNavigate(mojo::URLRequestPtr request) { 343 void Frame::StartNavigate(mojo::URLRequestPtr request) {
344 if (waiting_for_on_will_navigate_ack_) { 344 if (waiting_for_on_will_navigate_ack_) {
345 // We're waiting for OnWillNavigate(). We need to wait until that completes 345 // We're waiting for OnWillNavigate(). We need to wait until that completes
346 // before attempting any other loads. 346 // before attempting any other loads.
347 pending_navigate_ = request.Pass(); 347 pending_navigate_ = std::move(request);
348 return; 348 return;
349 } 349 }
350 350
351 pending_navigate_.reset(); 351 pending_navigate_.reset();
352 352
353 // We need a Window to navigate. When we get the Window we'll complete the 353 // We need a Window to navigate. When we get the Window we'll complete the
354 // navigation. 354 // navigation.
355 if (!window_) { 355 if (!window_) {
356 pending_navigate_ = request.Pass(); 356 pending_navigate_ = std::move(request);
357 return; 357 return;
358 } 358 }
359 359
360 // Drop any pending navigation requests. 360 // Drop any pending navigation requests.
361 navigate_weak_ptr_factory_.InvalidateWeakPtrs(); 361 navigate_weak_ptr_factory_.InvalidateWeakPtrs();
362 362
363 DVLOG(2) << "Frame::StartNavigate id=" << id_ << " url=" << request->url; 363 DVLOG(2) << "Frame::StartNavigate id=" << id_ << " url=" << request->url;
364 364
365 const GURL requested_url(request->url); 365 const GURL requested_url(request->url);
366 base::TimeTicks navigation_start_time = 366 base::TimeTicks navigation_start_time =
367 base::TimeTicks::FromInternalValue(request->originating_time_ticks); 367 base::TimeTicks::FromInternalValue(request->originating_time_ticks);
368 tree_->delegate_->CanNavigateFrame( 368 tree_->delegate_->CanNavigateFrame(
369 this, request.Pass(), base::Bind(&Frame::OnCanNavigateFrame, 369 this, std::move(request),
370 navigate_weak_ptr_factory_.GetWeakPtr(), 370 base::Bind(&Frame::OnCanNavigateFrame,
371 requested_url, navigation_start_time)); 371 navigate_weak_ptr_factory_.GetWeakPtr(), requested_url,
372 navigation_start_time));
372 } 373 }
373 374
374 void Frame::OnCanNavigateFrame( 375 void Frame::OnCanNavigateFrame(
375 const GURL& url, 376 const GURL& url,
376 base::TimeTicks navigation_start_time, 377 base::TimeTicks navigation_start_time,
377 uint32_t app_id, 378 uint32_t app_id,
378 mojom::FrameClient* frame_client, 379 mojom::FrameClient* frame_client,
379 scoped_ptr<FrameUserData> user_data, 380 scoped_ptr<FrameUserData> user_data,
380 mus::mojom::WindowTreeClientPtr window_tree_client) { 381 mus::mojom::WindowTreeClientPtr window_tree_client) {
381 TRACE_EVENT1("web_view", "Frame::OnCanNavigateFrame", 382 TRACE_EVENT1("web_view", "Frame::OnCanNavigateFrame",
382 "url", url.possibly_invalid_spec()); 383 "url", url.possibly_invalid_spec());
383 384
384 DVLOG(2) << "Frame::OnCanNavigateFrame id=" << id_ 385 DVLOG(2) << "Frame::OnCanNavigateFrame id=" << id_
385 << " equal=" << (AreAppIdsEqual(app_id, app_id_) ? "true" : "false"); 386 << " equal=" << (AreAppIdsEqual(app_id, app_id_) ? "true" : "false");
386 if (AreAppIdsEqual(app_id, app_id_)) { 387 if (AreAppIdsEqual(app_id, app_id_)) {
387 // The app currently rendering the frame will continue rendering it. In this 388 // The app currently rendering the frame will continue rendering it. In this
388 // case we do not use the WindowTreeClient (because the app has a Window 389 // case we do not use the WindowTreeClient (because the app has a Window
389 // already 390 // already
390 // and ends up reusing it). 391 // and ends up reusing it).
391 DCHECK(!window_tree_client); 392 DCHECK(!window_tree_client);
392 ChangeClient(frame_client, user_data.Pass(), window_tree_client.Pass(), 393 ChangeClient(frame_client, std::move(user_data),
393 app_id, navigation_start_time); 394 std::move(window_tree_client), app_id, navigation_start_time);
394 } else { 395 } else {
395 waiting_for_on_will_navigate_ack_ = true; 396 waiting_for_on_will_navigate_ack_ = true;
396 DCHECK(window_tree_client); 397 DCHECK(window_tree_client);
397 // TODO(sky): url isn't correct here, it should be a security origin. 398 // TODO(sky): url isn't correct here, it should be a security origin.
398 frame_client_->OnWillNavigate( 399 frame_client_->OnWillNavigate(
399 url.spec(), 400 url.spec(),
400 base::Bind(&Frame::OnWillNavigateAck, base::Unretained(this), 401 base::Bind(&Frame::OnWillNavigateAck, base::Unretained(this),
401 frame_client, base::Passed(&user_data), 402 frame_client, base::Passed(&user_data),
402 base::Passed(&window_tree_client), app_id, 403 base::Passed(&window_tree_client), app_id,
403 navigation_start_time)); 404 navigation_start_time));
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 } 482 }
482 483
483 void Frame::PostMessageEventToFrame(uint32_t target_frame_id, 484 void Frame::PostMessageEventToFrame(uint32_t target_frame_id,
484 mojom::HTMLMessageEventPtr event) { 485 mojom::HTMLMessageEventPtr event) {
485 // NOTE: |target_frame_id| is allowed to be from another connection. 486 // NOTE: |target_frame_id| is allowed to be from another connection.
486 Frame* target = tree_->root()->FindFrame(target_frame_id); 487 Frame* target = tree_->root()->FindFrame(target_frame_id);
487 if (!target || target == this || 488 if (!target || target == this ||
488 !tree_->delegate_->CanPostMessageEventToFrame(this, target, event.get())) 489 !tree_->delegate_->CanPostMessageEventToFrame(this, target, event.get()))
489 return; 490 return;
490 491
491 target->frame_client_->OnPostMessageEvent(id_, target_frame_id, event.Pass()); 492 target->frame_client_->OnPostMessageEvent(id_, target_frame_id,
493 std::move(event));
492 } 494 }
493 495
494 void Frame::LoadingStateChanged(bool loading, double progress) { 496 void Frame::LoadingStateChanged(bool loading, double progress) {
495 bool loading_state_changed = loading_ != loading; 497 bool loading_state_changed = loading_ != loading;
496 loading_ = loading; 498 loading_ = loading;
497 progress_ = progress; 499 progress_ = progress;
498 tree_->LoadingStateChanged(); 500 tree_->LoadingStateChanged();
499 501
500 if (loading_state_changed && parent_ && 502 if (loading_state_changed && parent_ &&
501 !AreAppIdsEqual(app_id_, parent_->app_id_)) { 503 !AreAppIdsEqual(app_id_, parent_->app_id_)) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 return; 548 return;
547 } 549 }
548 550
549 if (FindFrame(frame_id)) { 551 if (FindFrame(frame_id)) {
550 // TODO(sky): kill connection here? 552 // TODO(sky): kill connection here?
551 DVLOG(1) << "OnCreatedFrame supplied id of existing frame."; 553 DVLOG(1) << "OnCreatedFrame supplied id of existing frame.";
552 return; 554 return;
553 } 555 }
554 556
555 Frame* child_frame = tree_->CreateChildFrame( 557 Frame* child_frame = tree_->CreateChildFrame(
556 this, frame_request.Pass(), client.Pass(), frame_id, app_id_, 558 this, std::move(frame_request), std::move(client), frame_id, app_id_,
557 client_properties.To<ClientPropertyMap>()); 559 client_properties.To<ClientPropertyMap>());
558 child_frame->embedded_connection_id_ = embedded_connection_id_; 560 child_frame->embedded_connection_id_ = embedded_connection_id_;
559 } 561 }
560 562
561 void Frame::RequestNavigate(mojom::NavigationTargetType target_type, 563 void Frame::RequestNavigate(mojom::NavigationTargetType target_type,
562 uint32_t target_frame_id, 564 uint32_t target_frame_id,
563 mojo::URLRequestPtr request) { 565 mojo::URLRequestPtr request) {
564 if (target_type == mojom::NAVIGATION_TARGET_TYPE_EXISTING_FRAME) { 566 if (target_type == mojom::NAVIGATION_TARGET_TYPE_EXISTING_FRAME) {
565 // |target_frame| is allowed to come from another connection. 567 // |target_frame| is allowed to come from another connection.
566 Frame* target_frame = tree_->root()->FindFrame(target_frame_id); 568 Frame* target_frame = tree_->root()->FindFrame(target_frame_id);
567 if (!target_frame) { 569 if (!target_frame) {
568 DVLOG(1) << "RequestNavigate EXISTING_FRAME with no matching frame"; 570 DVLOG(1) << "RequestNavigate EXISTING_FRAME with no matching frame";
569 return; 571 return;
570 } 572 }
571 if (target_frame != tree_->root()) { 573 if (target_frame != tree_->root()) {
572 target_frame->StartNavigate(request.Pass()); 574 target_frame->StartNavigate(std::move(request));
573 return; 575 return;
574 } 576 }
575 // Else case if |target_frame| == root. Treat at top level request. 577 // Else case if |target_frame| == root. Treat at top level request.
576 } 578 }
577 tree_->delegate_->NavigateTopLevel(this, request.Pass()); 579 tree_->delegate_->NavigateTopLevel(this, std::move(request));
578 } 580 }
579 581
580 void Frame::DidNavigateLocally(const mojo::String& url) { 582 void Frame::DidNavigateLocally(const mojo::String& url) {
581 tree_->DidNavigateLocally(this, url.To<GURL>()); 583 tree_->DidNavigateLocally(this, url.To<GURL>());
582 } 584 }
583 585
584 void Frame::DispatchLoadEventToParent() { 586 void Frame::DispatchLoadEventToParent() {
585 if (parent_ && !AreAppIdsEqual(app_id_, parent_->app_id_)) { 587 if (parent_ && !AreAppIdsEqual(app_id_, parent_->app_id_)) {
586 // Send notification to fire a load event in the parent, if the parent is in 588 // Send notification to fire a load event in the parent, if the parent is in
587 // a different app. If the parent is in the same app, we assume that the app 589 // a different app. If the parent is in the same app, we assume that the app
(...skipping 10 matching lines...) Expand all
598 final_update); 600 final_update);
599 } 601 }
600 602
601 void Frame::OnFindInPageSelectionUpdated(int32_t request_id, 603 void Frame::OnFindInPageSelectionUpdated(int32_t request_id,
602 int32_t active_match_ordinal) { 604 int32_t active_match_ordinal) {
603 tree_->delegate_->OnFindInPageSelectionUpdated(request_id, this, 605 tree_->delegate_->OnFindInPageSelectionUpdated(request_id, this,
604 active_match_ordinal); 606 active_match_ordinal);
605 } 607 }
606 608
607 } // namespace web_view 609 } // namespace web_view
OLDNEW
« no previous file with comments | « components/web_view/client_initiated_frame_connection.cc ('k') | components/web_view/frame_apptest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698