| OLD | NEW |
| 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/at_exit.h" | 8 #include "base/at_exit.h" |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 Id old_view_id) OVERRIDE { | 356 Id old_view_id) OVERRIDE { |
| 357 tracker_.OnNodeViewReplaced(node, new_view_id, old_view_id); | 357 tracker_.OnNodeViewReplaced(node, new_view_id, old_view_id); |
| 358 } | 358 } |
| 359 virtual void OnViewInputEvent(Id view_id, | 359 virtual void OnViewInputEvent(Id view_id, |
| 360 EventPtr event, | 360 EventPtr event, |
| 361 const Callback<void()>& callback) OVERRIDE { | 361 const Callback<void()>& callback) OVERRIDE { |
| 362 tracker_.OnViewInputEvent(view_id, event.Pass()); | 362 tracker_.OnViewInputEvent(view_id, event.Pass()); |
| 363 } | 363 } |
| 364 virtual void OnFocusChanged(Id gained_focus_id, | 364 virtual void OnFocusChanged(Id gained_focus_id, |
| 365 Id lost_focus_id) OVERRIDE {} | 365 Id lost_focus_id) OVERRIDE {} |
| 366 virtual void EmbedRoot(const String& url) OVERRIDE { | 366 virtual void Embed(const String& url) OVERRIDE { |
| 367 tracker_.OnEmbedRoot(url); | 367 tracker_.OnEmbed(url); |
| 368 } | 368 } |
| 369 virtual void DispatchOnViewInputEvent(Id view_id, | 369 virtual void DispatchOnViewInputEvent(Id view_id, |
| 370 mojo::EventPtr event) OVERRIDE { | 370 mojo::EventPtr event) OVERRIDE { |
| 371 } | 371 } |
| 372 | 372 |
| 373 private: | 373 private: |
| 374 TestChangeTracker tracker_; | 374 TestChangeTracker tracker_; |
| 375 ViewManagerProxy connection_; | 375 ViewManagerProxy connection_; |
| 376 | 376 |
| 377 DISALLOW_COPY_AND_ASSIGN(TestViewManagerClientConnection); | 377 DISALLOW_COPY_AND_ASSIGN(TestViewManagerClientConnection); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 ConnectionSpecificId node_id) { | 414 ConnectionSpecificId node_id) { |
| 415 return (connection_id << 16) | node_id; | 415 return (connection_id << 16) | node_id; |
| 416 } | 416 } |
| 417 | 417 |
| 418 // Creates an id used for transport from the specified parameters. | 418 // Creates an id used for transport from the specified parameters. |
| 419 Id BuildViewId(ConnectionSpecificId connection_id, | 419 Id BuildViewId(ConnectionSpecificId connection_id, |
| 420 ConnectionSpecificId view_id) { | 420 ConnectionSpecificId view_id) { |
| 421 return (connection_id << 16) | view_id; | 421 return (connection_id << 16) | view_id; |
| 422 } | 422 } |
| 423 | 423 |
| 424 // Callback from EmbedRoot(). |result| is the result of the | 424 // Callback from Embed(). |result| is the result of the |
| 425 // Embed() call and |run_loop| the nested RunLoop. | 425 // Embed() call and |run_loop| the nested RunLoop. |
| 426 void EmbedRootCallback(bool* result_cache, | 426 void EmbedCallback(bool* result_cache, base::RunLoop* run_loop, bool result) { |
| 427 base::RunLoop* run_loop, | |
| 428 bool result) { | |
| 429 *result_cache = result; | 427 *result_cache = result; |
| 430 run_loop->Quit(); | 428 run_loop->Quit(); |
| 431 } | 429 } |
| 432 | 430 |
| 433 // Responsible for establishing the initial ViewManagerService connection. | 431 // Embed from an application that does not yet have a view manager connection. |
| 434 // Blocks until result is determined. | 432 // Blocks until result is determined. |
| 435 bool EmbedRoot(ViewManagerInitService* view_manager_init, | 433 bool InitEmbed(ViewManagerInitService* view_manager_init, |
| 436 const std::string& url) { | 434 const std::string& url, |
| 435 size_t number_of_calls) { |
| 437 bool result = false; | 436 bool result = false; |
| 438 base::RunLoop run_loop; | 437 base::RunLoop run_loop; |
| 439 view_manager_init->EmbedRoot(url, base::Bind(&EmbedRootCallback, | 438 for (size_t i = 0; i < number_of_calls; ++i) { |
| 440 &result, &run_loop)); | 439 view_manager_init->Embed(url, base::Bind(&EmbedCallback, |
| 440 &result, &run_loop)); |
| 441 } |
| 441 run_loop.Run(); | 442 run_loop.Run(); |
| 442 return result; | 443 return result; |
| 443 } | 444 } |
| 444 | 445 |
| 445 } // namespace | 446 } // namespace |
| 446 | 447 |
| 447 typedef std::vector<std::string> Changes; | 448 typedef std::vector<std::string> Changes; |
| 448 | 449 |
| 449 class ViewManagerTest : public testing::Test { | 450 class ViewManagerTest : public testing::Test { |
| 450 public: | 451 public: |
| 451 ViewManagerTest() : connection_(NULL), connection2_(NULL) {} | 452 ViewManagerTest() : connection_(NULL), connection2_(NULL) {} |
| 452 | 453 |
| 453 virtual void SetUp() OVERRIDE { | 454 virtual void SetUp() OVERRIDE { |
| 454 test_helper_.Init(); | 455 test_helper_.Init(); |
| 455 | 456 |
| 456 test_helper_.SetLoaderForURL( | 457 test_helper_.SetLoaderForURL( |
| 457 scoped_ptr<ServiceLoader>(new EmbedServiceLoader()), | 458 scoped_ptr<ServiceLoader>(new EmbedServiceLoader()), |
| 458 GURL(kTestServiceURL)); | 459 GURL(kTestServiceURL)); |
| 459 | 460 |
| 460 test_helper_.SetLoaderForURL( | 461 test_helper_.SetLoaderForURL( |
| 461 scoped_ptr<ServiceLoader>(new EmbedServiceLoader()), | 462 scoped_ptr<ServiceLoader>(new EmbedServiceLoader()), |
| 462 GURL(kTestServiceURL2)); | 463 GURL(kTestServiceURL2)); |
| 463 | 464 |
| 464 test_helper_.service_manager()->ConnectToService( | 465 test_helper_.service_manager()->ConnectToService( |
| 465 GURL("mojo:mojo_view_manager"), | 466 GURL("mojo:mojo_view_manager"), |
| 466 &view_manager_init_); | 467 &view_manager_init_); |
| 467 ASSERT_TRUE(EmbedRoot(view_manager_init_.get(), kTestServiceURL)); | 468 ASSERT_TRUE(InitEmbed(view_manager_init_.get(), kTestServiceURL, 1)); |
| 468 | 469 |
| 469 connection_ = ViewManagerProxy::WaitForInstance(); | 470 connection_ = ViewManagerProxy::WaitForInstance(); |
| 470 ASSERT_TRUE(connection_ != NULL); | 471 ASSERT_TRUE(connection_ != NULL); |
| 471 connection_->DoRunLoopUntilChangesCount(1); | 472 connection_->DoRunLoopUntilChangesCount(1); |
| 472 } | 473 } |
| 473 | 474 |
| 474 virtual void TearDown() OVERRIDE { | 475 virtual void TearDown() OVERRIDE { |
| 475 if (connection2_) | 476 if (connection2_) |
| 476 connection2_->Destroy(); | 477 connection2_->Destroy(); |
| 477 if (connection_) | 478 if (connection_) |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 shell::ShellTestHelper test_helper_; | 514 shell::ShellTestHelper test_helper_; |
| 514 | 515 |
| 515 ViewManagerInitServicePtr view_manager_init_; | 516 ViewManagerInitServicePtr view_manager_init_; |
| 516 | 517 |
| 517 ViewManagerProxy* connection_; | 518 ViewManagerProxy* connection_; |
| 518 ViewManagerProxy* connection2_; | 519 ViewManagerProxy* connection2_; |
| 519 | 520 |
| 520 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); | 521 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); |
| 521 }; | 522 }; |
| 522 | 523 |
| 523 TEST_F(ViewManagerTest, SecondEmbedRoot) { | 524 TEST_F(ViewManagerTest, SecondEmbedRoot_InitService) { |
| 524 ASSERT_TRUE(EmbedRoot(view_manager_init_.get(), kTestServiceURL)); | 525 ASSERT_TRUE(InitEmbed(view_manager_init_.get(), kTestServiceURL, 1)); |
| 525 connection_->DoRunLoopUntilChangesCount(1); | 526 connection_->DoRunLoopUntilChangesCount(1); |
| 526 EXPECT_EQ(kTestServiceURL, connection_->changes()[0].embed_url); | 527 EXPECT_EQ(kTestServiceURL, connection_->changes()[0].embed_url); |
| 527 } | 528 } |
| 528 | 529 |
| 530 TEST_F(ViewManagerTest, SecondEmbedRoot_Service) { |
| 531 ASSERT_TRUE(connection_->Embed(BuildNodeId(0, 0), kTestServiceURL)); |
| 532 connection_->DoRunLoopUntilChangesCount(1); |
| 533 EXPECT_EQ(kTestServiceURL, connection_->changes()[0].embed_url); |
| 534 } |
| 535 |
| 536 TEST_F(ViewManagerTest, MultipleEmbedRootsBeforeWTHReady) { |
| 537 ASSERT_TRUE(InitEmbed(view_manager_init_.get(), kTestServiceURL, 2)); |
| 538 connection_->DoRunLoopUntilChangesCount(2); |
| 539 EXPECT_EQ(kTestServiceURL, connection_->changes()[0].embed_url); |
| 540 EXPECT_EQ(kTestServiceURL, connection_->changes()[1].embed_url); |
| 541 } |
| 542 |
| 529 // Verifies client gets a valid id. | 543 // Verifies client gets a valid id. |
| 530 TEST_F(ViewManagerTest, ValidId) { | 544 TEST_F(ViewManagerTest, ValidId) { |
| 531 // TODO(beng): this should really have the URL of the application that | 545 // TODO(beng): this should really have the URL of the application that |
| 532 // connected to ViewManagerInit. | 546 // connected to ViewManagerInit. |
| 533 EXPECT_EQ("OnConnectionEstablished creator=", | 547 EXPECT_EQ("OnConnectionEstablished creator=", |
| 534 ChangesToDescription1(connection_->changes())[0]); | 548 ChangesToDescription1(connection_->changes())[0]); |
| 535 | 549 |
| 536 // All these tests assume 1 for the client id. The only real assertion here is | 550 // All these tests assume 1 for the client id. The only real assertion here is |
| 537 // the client id is not zero, but adding this as rest of code here assumes 1. | 551 // the client id is not zero, but adding this as rest of code here assumes 1. |
| 538 EXPECT_EQ(1, connection_->changes()[0].connection_id); | 552 EXPECT_EQ(1, connection_->changes()[0].connection_id); |
| (...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1394 // originating connection. | 1408 // originating connection. |
| 1395 | 1409 |
| 1396 // TODO(beng): Add tests for focus: | 1410 // TODO(beng): Add tests for focus: |
| 1397 // - focus between two nodes known to a connection | 1411 // - focus between two nodes known to a connection |
| 1398 // - focus between nodes unknown to one of the connections. | 1412 // - focus between nodes unknown to one of the connections. |
| 1399 // - focus between nodes unknown to either connection. | 1413 // - focus between nodes unknown to either connection. |
| 1400 | 1414 |
| 1401 } // namespace service | 1415 } // namespace service |
| 1402 } // namespace view_manager | 1416 } // namespace view_manager |
| 1403 } // namespace mojo | 1417 } // namespace mojo |
| OLD | NEW |