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

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

Issue 1414663002: Mandoline webview: View => Window (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More renaming Created 5 years, 2 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/web_view/frame.cc ('k') | components/web_view/frame_connection.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 } 126 }
127 127
128 base::TimeTicks last_navigation_start_time() const { 128 base::TimeTicks last_navigation_start_time() const {
129 return last_navigation_start_time_; 129 return last_navigation_start_time_;
130 } 130 }
131 131
132 // mojom::FrameClient: 132 // mojom::FrameClient:
133 void OnConnect(mojom::FramePtr frame, 133 void OnConnect(mojom::FramePtr frame,
134 uint32_t change_id, 134 uint32_t change_id,
135 uint32_t window_id, 135 uint32_t window_id,
136 mojom::ViewConnectType view_connect_type, 136 mojom::WindowConnectType window_connect_type,
137 mojo::Array<mojom::FrameDataPtr> frames, 137 mojo::Array<mojom::FrameDataPtr> frames,
138 int64_t navigation_start_time_ticks, 138 int64_t navigation_start_time_ticks,
139 const OnConnectCallback& callback) override { 139 const OnConnectCallback& callback) override {
140 connect_count_++; 140 connect_count_++;
141 connect_frames_ = frames.Pass(); 141 connect_frames_ = frames.Pass();
142 if (frame) 142 if (frame)
143 server_frame_ = frame.Pass(); 143 server_frame_ = frame.Pass();
144 callback.Run(); 144 callback.Run();
145 if (!on_connect_callback_.is_null()) 145 if (!on_connect_callback_.is_null())
146 on_connect_callback_.Run(); 146 on_connect_callback_.Run();
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 base::Closure on_dispatch_load_event_callback_; 205 base::Closure on_dispatch_load_event_callback_;
206 LoadingStateChangedNotification last_loading_state_changed_notification_; 206 LoadingStateChangedNotification last_loading_state_changed_notification_;
207 uint32_t last_dispatch_load_event_frame_id_; 207 uint32_t last_dispatch_load_event_frame_id_;
208 base::TimeTicks last_navigation_start_time_; 208 base::TimeTicks last_navigation_start_time_;
209 209
210 DISALLOW_COPY_AND_ASSIGN(TestFrameClient); 210 DISALLOW_COPY_AND_ASSIGN(TestFrameClient);
211 }; 211 };
212 212
213 class FrameTest; 213 class FrameTest;
214 214
215 // ViewAndFrame maintains the View and TestFrameClient associated with 215 // WindowAndFrame maintains the Window and TestFrameClient associated with
216 // a single FrameClient. In other words this maintains the data structures 216 // a single FrameClient. In other words this maintains the data structures
217 // needed to represent a client side frame. To obtain one use 217 // needed to represent a client side frame. To obtain one use
218 // FrameTest::WaitForViewAndFrame(). 218 // FrameTest::WaitForViewAndFrame().
219 class ViewAndFrame : public mus::WindowTreeDelegate { 219 class WindowAndFrame : public mus::WindowTreeDelegate {
220 public: 220 public:
221 ~ViewAndFrame() override { 221 ~WindowAndFrame() override {
222 if (view_) 222 if (window_)
223 delete view_->connection(); 223 delete window_->connection();
224 } 224 }
225 225
226 // The View associated with the frame. 226 // The Window associated with the frame.
227 mus::Window* view() { return view_; } 227 mus::Window* window() { return window_; }
228 TestFrameClient* test_frame_client() { return &test_frame_tree_client_; } 228 TestFrameClient* test_frame_client() { return &test_frame_tree_client_; }
229 mojom::Frame* server_frame() { 229 mojom::Frame* server_frame() {
230 return test_frame_tree_client_.server_frame(); 230 return test_frame_tree_client_.server_frame();
231 } 231 }
232 232
233 private: 233 private:
234 friend class FrameTest; 234 friend class FrameTest;
235 235
236 ViewAndFrame() 236 WindowAndFrame()
237 : view_(nullptr), frame_client_binding_(&test_frame_tree_client_) {} 237 : window_(nullptr), frame_client_binding_(&test_frame_tree_client_) {}
238 238
239 void set_view(Window* view) { view_ = view; } 239 void set_window(Window* window) { window_ = window; }
240 240
241 // Runs a message loop until the view and frame data have been received. 241 // Runs a message loop until the window and frame data have been received.
242 void WaitForViewAndFrame() { run_loop_.Run(); } 242 void WaitForViewAndFrame() { run_loop_.Run(); }
243 243
244 mojo::InterfaceRequest<mojom::Frame> GetServerFrameRequest() { 244 mojo::InterfaceRequest<mojom::Frame> GetServerFrameRequest() {
245 return test_frame_tree_client_.GetServerFrameRequest(); 245 return test_frame_tree_client_.GetServerFrameRequest();
246 } 246 }
247 247
248 mojom::FrameClientPtr GetFrameClientPtr() { 248 mojom::FrameClientPtr GetFrameClientPtr() {
249 mojom::FrameClientPtr client_ptr; 249 mojom::FrameClientPtr client_ptr;
250 frame_client_binding_.Bind(GetProxy(&client_ptr)); 250 frame_client_binding_.Bind(GetProxy(&client_ptr));
251 return client_ptr.Pass(); 251 return client_ptr.Pass();
252 } 252 }
253 253
254 void Bind(mojo::InterfaceRequest<mojom::FrameClient> request) { 254 void Bind(mojo::InterfaceRequest<mojom::FrameClient> request) {
255 ASSERT_FALSE(frame_client_binding_.is_bound()); 255 ASSERT_FALSE(frame_client_binding_.is_bound());
256 test_frame_tree_client_.set_on_connect_callback( 256 test_frame_tree_client_.set_on_connect_callback(
257 base::Bind(&ViewAndFrame::OnGotConnect, base::Unretained(this))); 257 base::Bind(&WindowAndFrame::OnGotConnect, base::Unretained(this)));
258 frame_client_binding_.Bind(request.Pass()); 258 frame_client_binding_.Bind(request.Pass());
259 } 259 }
260 260
261 void OnGotConnect() { QuitRunLoopIfNecessary(); } 261 void OnGotConnect() { QuitRunLoopIfNecessary(); }
262 262
263 void QuitRunLoopIfNecessary() { 263 void QuitRunLoopIfNecessary() {
264 if (view_ && test_frame_tree_client_.connect_count()) 264 if (window_ && test_frame_tree_client_.connect_count())
265 run_loop_.Quit(); 265 run_loop_.Quit();
266 } 266 }
267 267
268 // Overridden from WindowTreeDelegate: 268 // Overridden from WindowTreeDelegate:
269 void OnEmbed(Window* root) override { 269 void OnEmbed(Window* root) override {
270 view_ = root; 270 window_ = root;
271 QuitRunLoopIfNecessary(); 271 QuitRunLoopIfNecessary();
272 } 272 }
273 void OnConnectionLost(WindowTreeConnection* connection) override { 273 void OnConnectionLost(WindowTreeConnection* connection) override {
274 view_ = nullptr; 274 window_ = nullptr;
275 } 275 }
276 276
277 mus::Window* view_; 277 mus::Window* window_;
278 base::RunLoop run_loop_; 278 base::RunLoop run_loop_;
279 TestFrameClient test_frame_tree_client_; 279 TestFrameClient test_frame_tree_client_;
280 mojo::Binding<mojom::FrameClient> frame_client_binding_; 280 mojo::Binding<mojom::FrameClient> frame_client_binding_;
281 281
282 DISALLOW_COPY_AND_ASSIGN(ViewAndFrame); 282 DISALLOW_COPY_AND_ASSIGN(WindowAndFrame);
283 }; 283 };
284 284
285 class FrameTest : public mojo::test::ApplicationTestBase, 285 class FrameTest : public mojo::test::ApplicationTestBase,
286 public mojo::ApplicationDelegate, 286 public mojo::ApplicationDelegate,
287 public mus::WindowTreeDelegate, 287 public mus::WindowTreeDelegate,
288 public mojo::InterfaceFactory<mus::mojom::WindowTreeClient>, 288 public mojo::InterfaceFactory<mus::mojom::WindowTreeClient>,
289 public mojo::InterfaceFactory<mojom::FrameClient> { 289 public mojo::InterfaceFactory<mojom::FrameClient> {
290 public: 290 public:
291 FrameTest() : most_recent_connection_(nullptr), window_manager_(nullptr) {} 291 FrameTest() : most_recent_connection_(nullptr), window_manager_(nullptr) {}
292 292
293 WindowTreeConnection* most_recent_connection() { 293 WindowTreeConnection* most_recent_connection() {
294 return most_recent_connection_; 294 return most_recent_connection_;
295 } 295 }
296 296
297 protected: 297 protected:
298 WindowTreeConnection* window_manager() { return window_manager_; } 298 WindowTreeConnection* window_manager() { return window_manager_; }
299 TestFrameTreeDelegate* frame_tree_delegate() { 299 TestFrameTreeDelegate* frame_tree_delegate() {
300 return frame_tree_delegate_.get(); 300 return frame_tree_delegate_.get();
301 } 301 }
302 FrameTree* frame_tree() { return frame_tree_.get(); } 302 FrameTree* frame_tree() { return frame_tree_.get(); }
303 ViewAndFrame* root_view_and_frame() { return root_view_and_frame_.get(); } 303 WindowAndFrame* root_window_and_frame() {
304 return root_window_and_frame_.get();
305 }
304 306
305 scoped_ptr<ViewAndFrame> NavigateFrameWithStartTime( 307 scoped_ptr<WindowAndFrame> NavigateFrameWithStartTime(
306 ViewAndFrame* view_and_frame, 308 WindowAndFrame* window_and_frame,
307 base::TimeTicks navigation_start_time) { 309 base::TimeTicks navigation_start_time) {
308 mojo::URLRequestPtr request(mojo::URLRequest::New()); 310 mojo::URLRequestPtr request(mojo::URLRequest::New());
309 request->url = mojo::String::From(application_impl()->url()); 311 request->url = mojo::String::From(application_impl()->url());
310 request->originating_time_ticks = navigation_start_time.ToInternalValue(); 312 request->originating_time_ticks = navigation_start_time.ToInternalValue();
311 view_and_frame->server_frame()->RequestNavigate( 313 window_and_frame->server_frame()->RequestNavigate(
312 mojom::NAVIGATION_TARGET_TYPE_EXISTING_FRAME, 314 mojom::NAVIGATION_TARGET_TYPE_EXISTING_FRAME,
313 view_and_frame->view()->id(), request.Pass()); 315 window_and_frame->window()->id(), request.Pass());
314 return WaitForViewAndFrame(); 316 return WaitForViewAndFrame();
315 } 317 }
316 318
317 scoped_ptr<ViewAndFrame> NavigateFrame(ViewAndFrame* view_and_frame) { 319 scoped_ptr<WindowAndFrame> NavigateFrame(WindowAndFrame* window_and_frame) {
318 return NavigateFrameWithStartTime(view_and_frame, base::TimeTicks()); 320 return NavigateFrameWithStartTime(window_and_frame, base::TimeTicks());
319 } 321 }
320 322
321 // Creates a new shared frame as a child of |parent|. 323 // Creates a new shared frame as a child of |parent|.
322 scoped_ptr<ViewAndFrame> CreateChildViewAndFrame(ViewAndFrame* parent) { 324 scoped_ptr<WindowAndFrame> CreateChildWindowAndFrame(WindowAndFrame* parent) {
323 mus::Window* child_frame_view = 325 mus::Window* child_frame_window =
324 parent->view()->connection()->NewWindow(); 326 parent->window()->connection()->NewWindow();
325 parent->view()->AddChild(child_frame_view); 327 parent->window()->AddChild(child_frame_window);
326 328
327 scoped_ptr<ViewAndFrame> view_and_frame(new ViewAndFrame); 329 scoped_ptr<WindowAndFrame> window_and_frame(new WindowAndFrame);
328 view_and_frame->set_view(child_frame_view); 330 window_and_frame->set_window(child_frame_window);
329 331
330 mojo::Map<mojo::String, mojo::Array<uint8_t>> client_properties; 332 mojo::Map<mojo::String, mojo::Array<uint8_t>> client_properties;
331 client_properties.mark_non_null(); 333 client_properties.mark_non_null();
332 parent->server_frame()->OnCreatedFrame( 334 parent->server_frame()->OnCreatedFrame(
333 view_and_frame->GetServerFrameRequest(), 335 window_and_frame->GetServerFrameRequest(),
334 view_and_frame->GetFrameClientPtr(), child_frame_view->id(), 336 window_and_frame->GetFrameClientPtr(), child_frame_window->id(),
335 client_properties.Pass()); 337 client_properties.Pass());
336 frame_tree_delegate()->WaitForCreateFrame(); 338 frame_tree_delegate()->WaitForCreateFrame();
337 return HasFatalFailure() ? nullptr : view_and_frame.Pass(); 339 return HasFatalFailure() ? nullptr : window_and_frame.Pass();
338 } 340 }
339 341
340 // Runs a message loop until the data necessary to represent to a client side 342 // Runs a message loop until the data necessary to represent to a client side
341 // frame has been obtained. 343 // frame has been obtained.
342 scoped_ptr<ViewAndFrame> WaitForViewAndFrame() { 344 scoped_ptr<WindowAndFrame> WaitForViewAndFrame() {
343 DCHECK(!view_and_frame_); 345 DCHECK(!window_and_frame_);
344 view_and_frame_.reset(new ViewAndFrame); 346 window_and_frame_.reset(new WindowAndFrame);
345 view_and_frame_->WaitForViewAndFrame(); 347 window_and_frame_->WaitForViewAndFrame();
346 return view_and_frame_.Pass(); 348 return window_and_frame_.Pass();
347 } 349 }
348 350
349 private: 351 private:
350 // ApplicationTestBase: 352 // ApplicationTestBase:
351 ApplicationDelegate* GetApplicationDelegate() override { return this; } 353 ApplicationDelegate* GetApplicationDelegate() override { return this; }
352 354
353 // ApplicationDelegate implementation. 355 // ApplicationDelegate implementation.
354 bool ConfigureIncomingConnection( 356 bool ConfigureIncomingConnection(
355 mojo::ApplicationConnection* connection) override { 357 mojo::ApplicationConnection* connection) override {
356 connection->AddService<mus::mojom::WindowTreeClient>(this); 358 connection->AddService<mus::mojom::WindowTreeClient>(this);
(...skipping 16 matching lines...) Expand all
373 375
374 ASSERT_TRUE(DoRunLoopWithTimeout()); 376 ASSERT_TRUE(DoRunLoopWithTimeout());
375 std::swap(window_manager_, most_recent_connection_); 377 std::swap(window_manager_, most_recent_connection_);
376 378
377 // Creates a FrameTree, which creates a single frame. Wait for the 379 // Creates a FrameTree, which creates a single frame. Wait for the
378 // FrameClient to be connected to. 380 // FrameClient to be connected to.
379 frame_tree_delegate_.reset(new TestFrameTreeDelegate(application_impl())); 381 frame_tree_delegate_.reset(new TestFrameTreeDelegate(application_impl()));
380 scoped_ptr<FrameConnection> frame_connection = 382 scoped_ptr<FrameConnection> frame_connection =
381 CreateFrameConnection(application_impl()); 383 CreateFrameConnection(application_impl());
382 mojom::FrameClient* frame_client = frame_connection->frame_client(); 384 mojom::FrameClient* frame_client = frame_connection->frame_client();
383 mus::mojom::WindowTreeClientPtr view_tree_client = 385 mus::mojom::WindowTreeClientPtr window_tree_client =
384 frame_connection->GetWindowTreeClient(); 386 frame_connection->GetWindowTreeClient();
385 mus::Window* frame_root_view = window_manager()->NewWindow(); 387 mus::Window* frame_root_view = window_manager()->NewWindow();
386 window_manager()->GetRoot()->AddChild(frame_root_view); 388 window_manager()->GetRoot()->AddChild(frame_root_view);
387 frame_tree_.reset(new FrameTree( 389 frame_tree_.reset(new FrameTree(
388 0u, frame_root_view, view_tree_client.Pass(), 390 0u, frame_root_view, window_tree_client.Pass(),
389 frame_tree_delegate_.get(), frame_client, frame_connection.Pass(), 391 frame_tree_delegate_.get(), frame_client, frame_connection.Pass(),
390 Frame::ClientPropertyMap(), base::TimeTicks::Now())); 392 Frame::ClientPropertyMap(), base::TimeTicks::Now()));
391 root_view_and_frame_ = WaitForViewAndFrame(); 393 root_window_and_frame_ = WaitForViewAndFrame();
392 } 394 }
393 395
394 // Overridden from testing::Test: 396 // Overridden from testing::Test:
395 void TearDown() override { 397 void TearDown() override {
396 root_view_and_frame_.reset(); 398 root_window_and_frame_.reset();
397 frame_tree_.reset(); 399 frame_tree_.reset();
398 frame_tree_delegate_.reset(); 400 frame_tree_delegate_.reset();
399 ApplicationTestBase::TearDown(); 401 ApplicationTestBase::TearDown();
400 } 402 }
401 403
402 // Overridden from mojo::InterfaceFactory<mus::mojom::WindowTreeClient>: 404 // Overridden from mojo::InterfaceFactory<mus::mojom::WindowTreeClient>:
403 void Create( 405 void Create(
404 mojo::ApplicationConnection* connection, 406 mojo::ApplicationConnection* connection,
405 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> request) override { 407 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> request) override {
406 if (view_and_frame_) { 408 if (window_and_frame_) {
407 mus::WindowTreeConnection::Create( 409 mus::WindowTreeConnection::Create(
408 view_and_frame_.get(), request.Pass(), 410 window_and_frame_.get(), request.Pass(),
409 mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED); 411 mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED);
410 } else { 412 } else {
411 mus::WindowTreeConnection::Create( 413 mus::WindowTreeConnection::Create(
412 this, request.Pass(), 414 this, request.Pass(),
413 mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED); 415 mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED);
414 } 416 }
415 } 417 }
416 418
417 // Overridden from mojo::InterfaceFactory<mojom::FrameClient>: 419 // Overridden from mojo::InterfaceFactory<mojom::FrameClient>:
418 void Create(mojo::ApplicationConnection* connection, 420 void Create(mojo::ApplicationConnection* connection,
419 mojo::InterfaceRequest<mojom::FrameClient> request) override { 421 mojo::InterfaceRequest<mojom::FrameClient> request) override {
420 ASSERT_TRUE(view_and_frame_); 422 ASSERT_TRUE(window_and_frame_);
421 view_and_frame_->Bind(request.Pass()); 423 window_and_frame_->Bind(request.Pass());
422 } 424 }
423 425
424 scoped_ptr<TestFrameTreeDelegate> frame_tree_delegate_; 426 scoped_ptr<TestFrameTreeDelegate> frame_tree_delegate_;
425 scoped_ptr<FrameTree> frame_tree_; 427 scoped_ptr<FrameTree> frame_tree_;
426 scoped_ptr<ViewAndFrame> root_view_and_frame_; 428 scoped_ptr<WindowAndFrame> root_window_and_frame_;
427 429
428 mus::mojom::WindowTreeHostPtr host_; 430 mus::mojom::WindowTreeHostPtr host_;
429 431
430 // Used to receive the most recent view manager loaded by an embed action. 432 // Used to receive the most recent window manager loaded by an embed action.
431 WindowTreeConnection* most_recent_connection_; 433 WindowTreeConnection* most_recent_connection_;
432 // The View Manager connection held by the window manager (app running at the 434 // The Window Manager connection held by the window manager (app running at
433 // root view). 435 // the
436 // root window).
434 WindowTreeConnection* window_manager_; 437 WindowTreeConnection* window_manager_;
435 438
436 scoped_ptr<ViewAndFrame> view_and_frame_; 439 scoped_ptr<WindowAndFrame> window_and_frame_;
437 440
438 MOJO_DISALLOW_COPY_AND_ASSIGN(FrameTest); 441 MOJO_DISALLOW_COPY_AND_ASSIGN(FrameTest);
439 }; 442 };
440 443
441 // Verifies the FrameData supplied to the root FrameClient::OnConnect(). 444 // Verifies the FrameData supplied to the root FrameClient::OnConnect().
442 TEST_F(FrameTest, RootFrameClientConnectData) { 445 TEST_F(FrameTest, RootFrameClientConnectData) {
443 mojo::Array<mojom::FrameDataPtr> frames = 446 mojo::Array<mojom::FrameDataPtr> frames =
444 root_view_and_frame()->test_frame_client()->connect_frames(); 447 root_window_and_frame()->test_frame_client()->connect_frames();
445 ASSERT_EQ(1u, frames.size()); 448 ASSERT_EQ(1u, frames.size());
446 EXPECT_EQ(root_view_and_frame()->view()->id(), frames[0]->frame_id); 449 EXPECT_EQ(root_window_and_frame()->window()->id(), frames[0]->frame_id);
447 EXPECT_EQ(0u, frames[0]->parent_id); 450 EXPECT_EQ(0u, frames[0]->parent_id);
448 } 451 }
449 452
450 // Verifies the FrameData supplied to a child FrameClient::OnConnect(). 453 // Verifies the FrameData supplied to a child FrameClient::OnConnect().
451 TEST_F(FrameTest, ChildFrameClientConnectData) { 454 TEST_F(FrameTest, ChildFrameClientConnectData) {
452 scoped_ptr<ViewAndFrame> child_view_and_frame( 455 scoped_ptr<WindowAndFrame> child_view_and_frame(
453 CreateChildViewAndFrame(root_view_and_frame())); 456 CreateChildWindowAndFrame(root_window_and_frame()));
454 ASSERT_TRUE(child_view_and_frame); 457 ASSERT_TRUE(child_view_and_frame);
455 // Initially created child frames don't get OnConnect(). 458 // Initially created child frames don't get OnConnect().
456 EXPECT_EQ(0, child_view_and_frame->test_frame_client()->connect_count()); 459 EXPECT_EQ(0, child_view_and_frame->test_frame_client()->connect_count());
457 460
458 scoped_ptr<ViewAndFrame> navigated_child_view_and_frame = 461 scoped_ptr<WindowAndFrame> navigated_child_view_and_frame =
459 NavigateFrame(child_view_and_frame.get()).Pass(); 462 NavigateFrame(child_view_and_frame.get()).Pass();
460 463
461 mojo::Array<mojom::FrameDataPtr> frames_in_child = 464 mojo::Array<mojom::FrameDataPtr> frames_in_child =
462 navigated_child_view_and_frame->test_frame_client()->connect_frames(); 465 navigated_child_view_and_frame->test_frame_client()->connect_frames();
463 EXPECT_EQ(child_view_and_frame->view()->id(), 466 EXPECT_EQ(child_view_and_frame->window()->id(),
464 navigated_child_view_and_frame->view()->id()); 467 navigated_child_view_and_frame->window()->id());
465 // We expect 2 frames. One for the root, one for the child. 468 // We expect 2 frames. One for the root, one for the child.
466 ASSERT_EQ(2u, frames_in_child.size()); 469 ASSERT_EQ(2u, frames_in_child.size());
467 EXPECT_EQ(frame_tree()->root()->id(), frames_in_child[0]->frame_id); 470 EXPECT_EQ(frame_tree()->root()->id(), frames_in_child[0]->frame_id);
468 EXPECT_EQ(0u, frames_in_child[0]->parent_id); 471 EXPECT_EQ(0u, frames_in_child[0]->parent_id);
469 EXPECT_EQ(navigated_child_view_and_frame->view()->id(), 472 EXPECT_EQ(navigated_child_view_and_frame->window()->id(),
470 frames_in_child[1]->frame_id); 473 frames_in_child[1]->frame_id);
471 EXPECT_EQ(frame_tree()->root()->id(), frames_in_child[1]->parent_id); 474 EXPECT_EQ(frame_tree()->root()->id(), frames_in_child[1]->parent_id);
472 } 475 }
473 476
474 TEST_F(FrameTest, OnViewEmbeddedInFrameDisconnected) { 477 TEST_F(FrameTest, OnViewEmbeddedInFrameDisconnected) {
475 scoped_ptr<ViewAndFrame> child_view_and_frame( 478 scoped_ptr<WindowAndFrame> child_view_and_frame(
476 CreateChildViewAndFrame(root_view_and_frame())); 479 CreateChildWindowAndFrame(root_window_and_frame()));
477 ASSERT_TRUE(child_view_and_frame); 480 ASSERT_TRUE(child_view_and_frame);
478 481
479 scoped_ptr<ViewAndFrame> navigated_child_view_and_frame = 482 scoped_ptr<WindowAndFrame> navigated_child_view_and_frame =
480 NavigateFrame(child_view_and_frame.get()).Pass(); 483 NavigateFrame(child_view_and_frame.get()).Pass();
481 484
482 // Delete the WindowTreeConnection for the child, which should trigger 485 // Delete the WindowTreeConnection for the child, which should trigger
483 // notification. 486 // notification.
484 delete navigated_child_view_and_frame->view()->connection(); 487 delete navigated_child_view_and_frame->window()->connection();
485 ASSERT_EQ(1u, frame_tree()->root()->children().size()); 488 ASSERT_EQ(1u, frame_tree()->root()->children().size());
486 ASSERT_NO_FATAL_FAILURE(frame_tree_delegate()->WaitForFrameDisconnected( 489 ASSERT_NO_FATAL_FAILURE(frame_tree_delegate()->WaitForFrameDisconnected(
487 frame_tree()->root()->children()[0])); 490 frame_tree()->root()->children()[0]));
488 ASSERT_EQ(1u, frame_tree()->root()->children().size()); 491 ASSERT_EQ(1u, frame_tree()->root()->children().size());
489 } 492 }
490 493
491 TEST_F(FrameTest, NotifyRemoteParentWithLoadingState) { 494 TEST_F(FrameTest, NotifyRemoteParentWithLoadingState) {
492 scoped_ptr<ViewAndFrame> child_view_and_frame( 495 scoped_ptr<WindowAndFrame> child_view_and_frame(
493 CreateChildViewAndFrame(root_view_and_frame())); 496 CreateChildWindowAndFrame(root_window_and_frame()));
494 uint32_t child_frame_id = child_view_and_frame->view()->id(); 497 uint32_t child_frame_id = child_view_and_frame->window()->id();
495 498
496 { 499 {
497 base::RunLoop run_loop; 500 base::RunLoop run_loop;
498 root_view_and_frame() 501 root_window_and_frame()
499 ->test_frame_client() 502 ->test_frame_client()
500 ->set_on_loading_state_changed_callback(run_loop.QuitClosure()); 503 ->set_on_loading_state_changed_callback(run_loop.QuitClosure());
501 504
502 child_view_and_frame->server_frame()->LoadingStateChanged(true, .5); 505 child_view_and_frame->server_frame()->LoadingStateChanged(true, .5);
503 506
504 run_loop.Run(); 507 run_loop.Run();
505 508
506 uint32_t frame_id = 0; 509 uint32_t frame_id = 0;
507 bool loading = false; 510 bool loading = false;
508 root_view_and_frame() 511 root_window_and_frame()
509 ->test_frame_client() 512 ->test_frame_client()
510 ->last_loading_state_changed_notification(&frame_id, &loading); 513 ->last_loading_state_changed_notification(&frame_id, &loading);
511 EXPECT_EQ(child_frame_id, frame_id); 514 EXPECT_EQ(child_frame_id, frame_id);
512 EXPECT_TRUE(loading); 515 EXPECT_TRUE(loading);
513 } 516 }
514 { 517 {
515 base::RunLoop run_loop; 518 base::RunLoop run_loop;
516 root_view_and_frame() 519 root_window_and_frame()
517 ->test_frame_client() 520 ->test_frame_client()
518 ->set_on_loading_state_changed_callback(run_loop.QuitClosure()); 521 ->set_on_loading_state_changed_callback(run_loop.QuitClosure());
519 522
520 ASSERT_TRUE(child_view_and_frame); 523 ASSERT_TRUE(child_view_and_frame);
521 ASSERT_TRUE(child_view_and_frame->server_frame()); 524 ASSERT_TRUE(child_view_and_frame->server_frame());
522 525
523 child_view_and_frame->server_frame()->LoadingStateChanged(false, 1); 526 child_view_and_frame->server_frame()->LoadingStateChanged(false, 1);
524 527
525 run_loop.Run(); 528 run_loop.Run();
526 529
527 uint32_t frame_id = 0; 530 uint32_t frame_id = 0;
528 bool loading = false; 531 bool loading = false;
529 root_view_and_frame() 532 root_window_and_frame()
530 ->test_frame_client() 533 ->test_frame_client()
531 ->last_loading_state_changed_notification(&frame_id, &loading); 534 ->last_loading_state_changed_notification(&frame_id, &loading);
532 EXPECT_EQ(child_frame_id, frame_id); 535 EXPECT_EQ(child_frame_id, frame_id);
533 EXPECT_FALSE(loading); 536 EXPECT_FALSE(loading);
534 } 537 }
535 } 538 }
536 539
537 TEST_F(FrameTest, NotifyRemoteParentWithLoadEvent) { 540 TEST_F(FrameTest, NotifyRemoteParentWithLoadEvent) {
538 scoped_ptr<ViewAndFrame> child_view_and_frame( 541 scoped_ptr<WindowAndFrame> child_view_and_frame(
539 CreateChildViewAndFrame(root_view_and_frame())); 542 CreateChildWindowAndFrame(root_window_and_frame()));
540 uint32_t child_frame_id = child_view_and_frame->view()->id(); 543 uint32_t child_frame_id = child_view_and_frame->window()->id();
541 544
542 base::RunLoop run_loop; 545 base::RunLoop run_loop;
543 root_view_and_frame() 546 root_window_and_frame()
544 ->test_frame_client() 547 ->test_frame_client()
545 ->set_on_dispatch_load_event_callback(run_loop.QuitClosure()); 548 ->set_on_dispatch_load_event_callback(run_loop.QuitClosure());
546 549
547 child_view_and_frame->server_frame()->DispatchLoadEventToParent(); 550 child_view_and_frame->server_frame()->DispatchLoadEventToParent();
548 551
549 run_loop.Run(); 552 run_loop.Run();
550 553
551 uint32_t frame_id = root_view_and_frame() 554 uint32_t frame_id = root_window_and_frame()
552 ->test_frame_client() 555 ->test_frame_client()
553 ->last_dispatch_load_event_frame_id(); 556 ->last_dispatch_load_event_frame_id();
554 EXPECT_EQ(child_frame_id, frame_id); 557 EXPECT_EQ(child_frame_id, frame_id);
555 } 558 }
556 559
557 TEST_F(FrameTest, PassAlongNavigationStartTime) { 560 TEST_F(FrameTest, PassAlongNavigationStartTime) {
558 scoped_ptr<ViewAndFrame> child_view_and_frame( 561 scoped_ptr<WindowAndFrame> child_view_and_frame(
559 CreateChildViewAndFrame(root_view_and_frame())); 562 CreateChildWindowAndFrame(root_window_and_frame()));
560 ASSERT_TRUE(child_view_and_frame); 563 ASSERT_TRUE(child_view_and_frame);
561 564
562 base::TimeTicks navigation_start_time = base::TimeTicks::FromInternalValue(1); 565 base::TimeTicks navigation_start_time = base::TimeTicks::FromInternalValue(1);
563 scoped_ptr<ViewAndFrame> navigated_child_view_and_frame = 566 scoped_ptr<WindowAndFrame> navigated_child_view_and_frame =
564 NavigateFrameWithStartTime(child_view_and_frame.get(), 567 NavigateFrameWithStartTime(child_view_and_frame.get(),
565 navigation_start_time) 568 navigation_start_time)
566 .Pass(); 569 .Pass();
567 EXPECT_EQ(navigation_start_time, 570 EXPECT_EQ(navigation_start_time,
568 navigated_child_view_and_frame->test_frame_client() 571 navigated_child_view_and_frame->test_frame_client()
569 ->last_navigation_start_time()); 572 ->last_navigation_start_time());
570 } 573 }
571 574
572 } // namespace web_view 575 } // namespace web_view
OLDNEW
« no previous file with comments | « components/web_view/frame.cc ('k') | components/web_view/frame_connection.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698