browser_controls_navigation_state_handler_browsertest.cc 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "content/public/browser/web_contents.h"
  5. #include "net/test/embedded_test_server/embedded_test_server.h"
  6. #include "weblayer/browser/browser_controls_navigation_state_handler.h"
  7. #include "weblayer/browser/browser_controls_navigation_state_handler_delegate.h"
  8. #include "weblayer/browser/tab_impl.h"
  9. #include "weblayer/shell/browser/shell.h"
  10. #include "weblayer/test/weblayer_browser_test.h"
  11. #include "weblayer/test/weblayer_browser_test_utils.h"
  12. namespace weblayer {
  13. class BrowserConrolsNavigationStateHandlerBrowserTest
  14. : public WebLayerBrowserTest {
  15. public:
  16. BrowserConrolsNavigationStateHandlerBrowserTest() = default;
  17. ~BrowserConrolsNavigationStateHandlerBrowserTest() override = default;
  18. // WebLayerBrowserTest:
  19. void SetUpOnMainThread() override {
  20. WebLayerBrowserTest::SetUpOnMainThread();
  21. ASSERT_TRUE(embedded_test_server()->Start());
  22. }
  23. content::WebContents* web_contents() {
  24. return static_cast<TabImpl*>(shell()->tab())->web_contents();
  25. }
  26. private:
  27. };
  28. class TestBrowserControlsNavigationStateHandlerDelegate
  29. : public BrowserControlsNavigationStateHandlerDelegate {
  30. public:
  31. // BrowserControlsNavigationStateHandlerDelegate:
  32. void OnBrowserControlsStateStateChanged(
  33. ControlsVisibilityReason reason,
  34. cc::BrowserControlsState state) override {
  35. state_ = state;
  36. if (quit_callback_)
  37. std::move(quit_callback_).Run();
  38. }
  39. void OnUpdateBrowserControlsStateBecauseOfProcessSwitch(
  40. bool did_commit) override {}
  41. void WaitForStateChanged() {
  42. base::RunLoop run_loop;
  43. quit_callback_ = run_loop.QuitClosure();
  44. run_loop.Run();
  45. }
  46. cc::BrowserControlsState state() { return state_; }
  47. private:
  48. base::OnceClosure quit_callback_;
  49. cc::BrowserControlsState state_ = cc::BrowserControlsState::kBoth;
  50. };
  51. // Tests that BrowserConrolsNavigationStateHandler informs that the status is
  52. // updated according to navigation progress.
  53. IN_PROC_BROWSER_TEST_F(BrowserConrolsNavigationStateHandlerBrowserTest, Basic) {
  54. TestBrowserControlsNavigationStateHandlerDelegate test_delegate;
  55. BrowserControlsNavigationStateHandler
  56. browser_controls_navigation_state_handler(web_contents(), &test_delegate);
  57. GURL test_url(embedded_test_server()->GetURL("/simple_page.html"));
  58. NavigateAndWaitForStart(test_url, shell()->tab());
  59. // `test_delegate` should get the status is updated to `kShown` on
  60. // DidStartNavigation();
  61. EXPECT_EQ(test_delegate.state(), cc::BrowserControlsState::kShown);
  62. test_delegate.WaitForStateChanged();
  63. // `test_delegate` should get the status is updated to `kBoth` on
  64. // DidFinishLoad();
  65. EXPECT_EQ(web_contents()->GetLastCommittedURL(), test_url);
  66. EXPECT_EQ(test_delegate.state(), cc::BrowserControlsState::kBoth);
  67. }
  68. } // namespace weblayer