| 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 "chrome/browser/ui/toolbar/browser_actions_bar_browsertest.h" | 5 #include "chrome/browser/ui/toolbar/browser_actions_bar_browsertest.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 base::CommandLine* command_line) { | 70 base::CommandLine* command_line) { |
| 71 ExtensionBrowserTest::SetUpCommandLine(command_line); | 71 ExtensionBrowserTest::SetUpCommandLine(command_line); |
| 72 ToolbarActionsBar::disable_animations_for_testing_ = true; | 72 ToolbarActionsBar::disable_animations_for_testing_ = true; |
| 73 // We need to disable Media Router since having Media Router enabled will | 73 // We need to disable Media Router since having Media Router enabled will |
| 74 // result in auto-enabling the redesign and breaking the test. | 74 // result in auto-enabling the redesign and breaking the test. |
| 75 override_media_router_.reset(new extensions::FeatureSwitch::ScopedOverride( | 75 override_media_router_.reset(new extensions::FeatureSwitch::ScopedOverride( |
| 76 extensions::FeatureSwitch::media_router(), false)); | 76 extensions::FeatureSwitch::media_router(), false)); |
| 77 // These tests are deliberately testing behavior without the redesign. | 77 // These tests are deliberately testing behavior without the redesign. |
| 78 // Forcefully disable it. | 78 // Forcefully disable it. |
| 79 override_redesign_.reset(new extensions::FeatureSwitch::ScopedOverride( | 79 override_redesign_.reset(new extensions::FeatureSwitch::ScopedOverride( |
| 80 extensions::FeatureSwitch::extension_action_redesign(), false)); | 80 extensions::FeatureSwitch::extension_action_redesign(), true)); |
| 81 } | 81 } |
| 82 | 82 |
| 83 void BrowserActionsBarBrowserTest::SetUpOnMainThread() { | 83 void BrowserActionsBarBrowserTest::SetUpOnMainThread() { |
| 84 ExtensionBrowserTest::SetUpOnMainThread(); | 84 ExtensionBrowserTest::SetUpOnMainThread(); |
| 85 browser_actions_bar_.reset(new BrowserActionTestUtil(browser())); | 85 browser_actions_bar_.reset(new BrowserActionTestUtil(browser())); |
| 86 toolbar_model_ = ToolbarActionsModel::Get(profile()); | 86 toolbar_model_ = ToolbarActionsModel::Get(profile()); |
| 87 } | 87 } |
| 88 | 88 |
| 89 void BrowserActionsBarBrowserTest::TearDownOnMainThread() { | 89 void BrowserActionsBarBrowserTest::TearDownOnMainThread() { |
| 90 ToolbarActionsBar::disable_animations_for_testing_ = false; | 90 ToolbarActionsBar::disable_animations_for_testing_ = false; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 108 EXPECT_TRUE(registry->enabled_extensions().GetByID(extensions[i]->id())) << | 108 EXPECT_TRUE(registry->enabled_extensions().GetByID(extensions[i]->id())) << |
| 109 extensions[i]->name(); | 109 extensions[i]->name(); |
| 110 EXPECT_EQ(static_cast<int>(i + 1), | 110 EXPECT_EQ(static_cast<int>(i + 1), |
| 111 browser_actions_bar_->NumberOfBrowserActions()); | 111 browser_actions_bar_->NumberOfBrowserActions()); |
| 112 EXPECT_TRUE(browser_actions_bar_->HasIcon(i)); | 112 EXPECT_TRUE(browser_actions_bar_->HasIcon(i)); |
| 113 EXPECT_EQ(static_cast<int>(i + 1), | 113 EXPECT_EQ(static_cast<int>(i + 1), |
| 114 browser_actions_bar()->VisibleBrowserActions()); | 114 browser_actions_bar()->VisibleBrowserActions()); |
| 115 } | 115 } |
| 116 } | 116 } |
| 117 | 117 |
| 118 // BrowserActionsBarRedesignBrowserTest: | 118 // BrowserActionsBarLegacyBrowserTest: |
| 119 | 119 |
| 120 BrowserActionsBarRedesignBrowserTest::BrowserActionsBarRedesignBrowserTest() { | 120 BrowserActionsBarLegacyBrowserTest::BrowserActionsBarLegacyBrowserTest() { |
| 121 } | 121 } |
| 122 | 122 |
| 123 BrowserActionsBarRedesignBrowserTest::~BrowserActionsBarRedesignBrowserTest() { | 123 BrowserActionsBarLegacyBrowserTest::~BrowserActionsBarLegacyBrowserTest() { |
| 124 } | 124 } |
| 125 | 125 |
| 126 void BrowserActionsBarRedesignBrowserTest::SetUpCommandLine( | 126 void BrowserActionsBarLegacyBrowserTest::SetUpCommandLine( |
| 127 base::CommandLine* command_line) { | 127 base::CommandLine* command_line) { |
| 128 BrowserActionsBarBrowserTest::SetUpCommandLine(command_line); | 128 BrowserActionsBarBrowserTest::SetUpCommandLine(command_line); |
| 129 // Override to force the redesign. Completely clear the previous override | 129 // Override to force the redesign. Completely clear the previous override |
| 130 // first, since doing so resets the value of the switch. | 130 // first, since doing so resets the value of the switch. |
| 131 override_redesign_.reset(); | 131 override_redesign_.reset(); |
| 132 override_redesign_.reset(new extensions::FeatureSwitch::ScopedOverride( | 132 override_redesign_.reset(new extensions::FeatureSwitch::ScopedOverride( |
| 133 extensions::FeatureSwitch::extension_action_redesign(), true)); | 133 extensions::FeatureSwitch::extension_action_redesign(), false)); |
| 134 } | 134 } |
| 135 | 135 |
| 136 // Test the basic functionality. | 136 // Test the basic functionality. |
| 137 IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, Basic) { | 137 IN_PROC_BROWSER_TEST_F(BrowserActionsBarLegacyBrowserTest, Basic) { |
| 138 // Load an extension with no browser action. | 138 // Load an extension with no browser action. |
| 139 extension_service()->AddExtension(CreateExtension("alpha", false).get()); | 139 extension_service()->AddExtension(CreateExtension("alpha", false).get()); |
| 140 // This extension should not be in the model (has no browser action). | 140 // This extension should not be in the model (has no browser action). |
| 141 EXPECT_EQ(0, browser_actions_bar()->NumberOfBrowserActions()); | 141 EXPECT_EQ(0, browser_actions_bar()->NumberOfBrowserActions()); |
| 142 | 142 |
| 143 // Load an extension with a browser action. | 143 // Load an extension with a browser action. |
| 144 extension_service()->AddExtension(CreateExtension("beta", true).get()); | 144 extension_service()->AddExtension(CreateExtension("beta", true).get()); |
| 145 EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); | 145 EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); |
| 146 EXPECT_TRUE(browser_actions_bar()->HasIcon(0)); | 146 EXPECT_TRUE(browser_actions_bar()->HasIcon(0)); |
| 147 | 147 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 178 | 178 |
| 179 // Move B to middle position. Order is C B A. | 179 // Move B to middle position. Order is C B A. |
| 180 toolbar_model()->MoveActionIcon(extension_b()->id(), 1); | 180 toolbar_model()->MoveActionIcon(extension_b()->id(), 1); |
| 181 EXPECT_EQ(extension_c()->id(), browser_actions_bar()->GetExtensionId(0)); | 181 EXPECT_EQ(extension_c()->id(), browser_actions_bar()->GetExtensionId(0)); |
| 182 EXPECT_EQ(extension_b()->id(), browser_actions_bar()->GetExtensionId(1)); | 182 EXPECT_EQ(extension_b()->id(), browser_actions_bar()->GetExtensionId(1)); |
| 183 EXPECT_EQ(extension_a()->id(), browser_actions_bar()->GetExtensionId(2)); | 183 EXPECT_EQ(extension_a()->id(), browser_actions_bar()->GetExtensionId(2)); |
| 184 } | 184 } |
| 185 | 185 |
| 186 // Test that explicitly hiding an extension action results in it disappearing | 186 // Test that explicitly hiding an extension action results in it disappearing |
| 187 // from the browser actions bar. | 187 // from the browser actions bar. |
| 188 IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, ForceHide) { | 188 IN_PROC_BROWSER_TEST_F(BrowserActionsBarLegacyBrowserTest, ForceHide) { |
| 189 LoadExtensions(); | 189 LoadExtensions(); |
| 190 | 190 |
| 191 EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions()); | 191 EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions()); |
| 192 EXPECT_EQ(extension_a()->id(), browser_actions_bar()->GetExtensionId(0)); | 192 EXPECT_EQ(extension_a()->id(), browser_actions_bar()->GetExtensionId(0)); |
| 193 // Force hide one of the extensions' browser action. | 193 // Force hide one of the extensions' browser action. |
| 194 extensions::ExtensionActionAPI::Get(browser()->profile())-> | 194 extensions::ExtensionActionAPI::Get(browser()->profile())-> |
| 195 SetBrowserActionVisibility(extension_a()->id(), false); | 195 SetBrowserActionVisibility(extension_a()->id(), false); |
| 196 // The browser action for Extension A should be removed. | 196 // The browser action for Extension A should be removed. |
| 197 EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); | 197 EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); |
| 198 EXPECT_EQ(extension_b()->id(), browser_actions_bar()->GetExtensionId(0)); | 198 EXPECT_EQ(extension_b()->id(), browser_actions_bar()->GetExtensionId(0)); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 // overflow. | 288 // overflow. |
| 289 EnableExtension(extension_c()->id()); | 289 EnableExtension(extension_c()->id()); |
| 290 EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); | 290 EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); |
| 291 EXPECT_EQ(extension_a()->id(), browser_actions_bar()->GetExtensionId(0)); | 291 EXPECT_EQ(extension_a()->id(), browser_actions_bar()->GetExtensionId(0)); |
| 292 EXPECT_EQ(extension_b()->id(), browser_actions_bar()->GetExtensionId(1)); | 292 EXPECT_EQ(extension_b()->id(), browser_actions_bar()->GetExtensionId(1)); |
| 293 EXPECT_TRUE(toolbar_actions_bar->NeedsOverflow()); | 293 EXPECT_TRUE(toolbar_actions_bar->NeedsOverflow()); |
| 294 } | 294 } |
| 295 | 295 |
| 296 // Test that, with the toolbar action redesign, actions that want to run have | 296 // Test that, with the toolbar action redesign, actions that want to run have |
| 297 // the proper appearance. | 297 // the proper appearance. |
| 298 IN_PROC_BROWSER_TEST_F(BrowserActionsBarRedesignBrowserTest, | 298 IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, |
| 299 TestUiForActionsWantToRun) { | 299 TestUiForActionsWantToRun) { |
| 300 LoadExtensions(); | 300 LoadExtensions(); |
| 301 EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions()); | 301 EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions()); |
| 302 | 302 |
| 303 // Load an extension with a page action. | 303 // Load an extension with a page action. |
| 304 scoped_refptr<const extensions::Extension> page_action_extension = | 304 scoped_refptr<const extensions::Extension> page_action_extension = |
| 305 extensions::extension_action_test_util::CreateActionExtension( | 305 extensions::extension_action_test_util::CreateActionExtension( |
| 306 "page action", extensions::extension_action_test_util::PAGE_ACTION); | 306 "page action", extensions::extension_action_test_util::PAGE_ACTION); |
| 307 extension_service()->AddExtension(page_action_extension.get()); | 307 extension_service()->AddExtension(page_action_extension.get()); |
| 308 | 308 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 405 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED, |
| 406 content::NotificationService::AllSources()); | 406 content::NotificationService::AllSources()); |
| 407 browser_actions_bar()->Press(1); | 407 browser_actions_bar()->Press(1); |
| 408 observer.Wait(); | 408 observer.Wait(); |
| 409 EXPECT_FALSE(browser_actions_bar()->HasPopup()); | 409 EXPECT_FALSE(browser_actions_bar()->HasPopup()); |
| 410 EXPECT_FALSE(first_controller->is_showing_popup()); | 410 EXPECT_FALSE(first_controller->is_showing_popup()); |
| 411 EXPECT_FALSE(second_controller->is_showing_popup()); | 411 EXPECT_FALSE(second_controller->is_showing_popup()); |
| 412 } | 412 } |
| 413 } | 413 } |
| 414 | 414 |
| 415 IN_PROC_BROWSER_TEST_F(BrowserActionsBarRedesignBrowserTest, | 415 IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, |
| 416 OverflowedBrowserActionPopupTest) { | 416 OverflowedBrowserActionPopupTest) { |
| 417 std::unique_ptr<BrowserActionTestUtil> overflow_bar = | 417 std::unique_ptr<BrowserActionTestUtil> overflow_bar = |
| 418 browser_actions_bar()->CreateOverflowBar(); | 418 browser_actions_bar()->CreateOverflowBar(); |
| 419 | 419 |
| 420 // Load up two extensions that have browser action popups. | 420 // Load up two extensions that have browser action popups. |
| 421 base::FilePath data_dir = | 421 base::FilePath data_dir = |
| 422 test_data_dir_.AppendASCII("api_test").AppendASCII("browser_action"); | 422 test_data_dir_.AppendASCII("api_test").AppendASCII("browser_action"); |
| 423 const extensions::Extension* first_extension = | 423 const extensions::Extension* first_extension = |
| 424 LoadExtension(data_dir.AppendASCII("open_popup")); | 424 LoadExtension(data_dir.AppendASCII("open_popup")); |
| 425 ASSERT_TRUE(first_extension); | 425 ASSERT_TRUE(first_extension); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 EXPECT_EQ(2, overflow_bar->VisibleBrowserActions()); | 492 EXPECT_EQ(2, overflow_bar->VisibleBrowserActions()); |
| 493 base::RunLoop().RunUntilIdle(); | 493 base::RunLoop().RunUntilIdle(); |
| 494 EXPECT_EQ(first_controller_main->GetId(), | 494 EXPECT_EQ(first_controller_main->GetId(), |
| 495 browser_actions_bar()->GetExtensionId(0)); | 495 browser_actions_bar()->GetExtensionId(0)); |
| 496 EXPECT_EQ(second_controller_main->GetId(), | 496 EXPECT_EQ(second_controller_main->GetId(), |
| 497 browser_actions_bar()->GetExtensionId(1)); | 497 browser_actions_bar()->GetExtensionId(1)); |
| 498 } | 498 } |
| 499 | 499 |
| 500 // Test removing an extension that has an popup showing. | 500 // Test removing an extension that has an popup showing. |
| 501 // Regression test for crbug.com/599467. | 501 // Regression test for crbug.com/599467. |
| 502 IN_PROC_BROWSER_TEST_F(BrowserActionsBarRedesignBrowserTest, | 502 IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, |
| 503 OverflowedBrowserActionPopupTestRemoval) { | 503 OverflowedBrowserActionPopupTestRemoval) { |
| 504 std::unique_ptr<BrowserActionTestUtil> overflow_bar = | 504 std::unique_ptr<BrowserActionTestUtil> overflow_bar = |
| 505 browser_actions_bar()->CreateOverflowBar(); | 505 browser_actions_bar()->CreateOverflowBar(); |
| 506 | 506 |
| 507 // Install an extension and shrink the visible count to zero so the extension | 507 // Install an extension and shrink the visible count to zero so the extension |
| 508 // is overflowed. | 508 // is overflowed. |
| 509 base::FilePath data_dir = | 509 base::FilePath data_dir = |
| 510 test_data_dir_.AppendASCII("api_test").AppendASCII("browser_action"); | 510 test_data_dir_.AppendASCII("api_test").AppendASCII("browser_action"); |
| 511 const extensions::Extension* extension = | 511 const extensions::Extension* extension = |
| 512 LoadExtension(data_dir.AppendASCII("open_popup")); | 512 LoadExtension(data_dir.AppendASCII("open_popup")); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 532 extensions::UnloadedExtensionInfo::REASON_UNINSTALL); | 532 extensions::UnloadedExtensionInfo::REASON_UNINSTALL); |
| 533 observer.Wait(); | 533 observer.Wait(); |
| 534 } | 534 } |
| 535 | 535 |
| 536 EXPECT_EQ(0, browser_actions_bar()->VisibleBrowserActions()); | 536 EXPECT_EQ(0, browser_actions_bar()->VisibleBrowserActions()); |
| 537 EXPECT_EQ(0, overflow_bar->VisibleBrowserActions()); | 537 EXPECT_EQ(0, overflow_bar->VisibleBrowserActions()); |
| 538 EXPECT_EQ(0u, toolbar_model()->toolbar_items().size()); | 538 EXPECT_EQ(0u, toolbar_model()->toolbar_items().size()); |
| 539 } | 539 } |
| 540 | 540 |
| 541 // Test that page action popups work with the toolbar redesign. | 541 // Test that page action popups work with the toolbar redesign. |
| 542 IN_PROC_BROWSER_TEST_F(BrowserActionsBarRedesignBrowserTest, | 542 IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, |
| 543 PageActionPopupsTest) { | 543 PageActionPopupsTest) { |
| 544 ExtensionTestMessageListener listener("ready", false); | 544 ExtensionTestMessageListener listener("ready", false); |
| 545 const extensions::Extension* page_action_extension = | 545 const extensions::Extension* page_action_extension = |
| 546 LoadExtension(test_data_dir_.AppendASCII("trigger_actions"). | 546 LoadExtension(test_data_dir_.AppendASCII("trigger_actions"). |
| 547 AppendASCII("page_action_popup")); | 547 AppendASCII("page_action_popup")); |
| 548 ASSERT_TRUE(page_action_extension); | 548 ASSERT_TRUE(page_action_extension); |
| 549 listener.WaitUntilSatisfied(); | 549 listener.WaitUntilSatisfied(); |
| 550 EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); | 550 EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); |
| 551 EXPECT_EQ(page_action_extension->id(), | 551 EXPECT_EQ(page_action_extension->id(), |
| 552 browser_actions_bar()->GetExtensionId(0)); | 552 browser_actions_bar()->GetExtensionId(0)); |
| 553 browser_actions_bar()->Press(0); | 553 browser_actions_bar()->Press(0); |
| 554 base::RunLoop().RunUntilIdle(); | 554 base::RunLoop().RunUntilIdle(); |
| 555 EXPECT_TRUE(browser_actions_bar()->HasPopup()); | 555 EXPECT_TRUE(browser_actions_bar()->HasPopup()); |
| 556 // Cleanup the popup (to avoid having windows open at tear down). | 556 // Cleanup the popup (to avoid having windows open at tear down). |
| 557 browser_actions_bar()->HidePopup(); | 557 browser_actions_bar()->HidePopup(); |
| 558 content::RunAllBlockingPoolTasksUntilIdle(); | 558 content::RunAllBlockingPoolTasksUntilIdle(); |
| 559 EXPECT_FALSE(browser_actions_bar()->HasPopup()); | 559 EXPECT_FALSE(browser_actions_bar()->HasPopup()); |
| 560 } | 560 } |
| 561 | 561 |
| 562 // Test removing an action while it is popped out. | 562 // Test removing an action while it is popped out. |
| 563 IN_PROC_BROWSER_TEST_F(BrowserActionsBarRedesignBrowserTest, | 563 IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, RemovePoppedOutAction) { |
| 564 RemovePoppedOutAction) { | |
| 565 // First, load up three separate extensions and reduce the visible count to | 564 // First, load up three separate extensions and reduce the visible count to |
| 566 // one (so that two are in the overflow). | 565 // one (so that two are in the overflow). |
| 567 scoped_refptr<const extensions::Extension> extension1 = | 566 scoped_refptr<const extensions::Extension> extension1 = |
| 568 extensions::extension_action_test_util::CreateActionExtension( | 567 extensions::extension_action_test_util::CreateActionExtension( |
| 569 "extension1", extensions::extension_action_test_util::BROWSER_ACTION); | 568 "extension1", extensions::extension_action_test_util::BROWSER_ACTION); |
| 570 extension_service()->AddExtension(extension1.get()); | 569 extension_service()->AddExtension(extension1.get()); |
| 571 scoped_refptr<const extensions::Extension> extension2 = | 570 scoped_refptr<const extensions::Extension> extension2 = |
| 572 extensions::extension_action_test_util::CreateActionExtension( | 571 extensions::extension_action_test_util::CreateActionExtension( |
| 573 "extension2", extensions::extension_action_test_util::BROWSER_ACTION); | 572 "extension2", extensions::extension_action_test_util::BROWSER_ACTION); |
| 574 extension_service()->AddExtension(extension2.get()); | 573 extension_service()->AddExtension(extension2.get()); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); | 633 EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); |
| 635 ASSERT_TRUE(toolbar_actions_bar->popped_out_action()); | 634 ASSERT_TRUE(toolbar_actions_bar->popped_out_action()); |
| 636 EXPECT_EQ(extension3->id(), | 635 EXPECT_EQ(extension3->id(), |
| 637 toolbar_actions_bar->popped_out_action()->GetId()); | 636 toolbar_actions_bar->popped_out_action()->GetId()); |
| 638 extension_service()->UnloadExtension( | 637 extension_service()->UnloadExtension( |
| 639 extension3->id(), extensions::UnloadedExtensionInfo::REASON_DISABLE); | 638 extension3->id(), extensions::UnloadedExtensionInfo::REASON_DISABLE); |
| 640 EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); | 639 EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); |
| 641 EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); | 640 EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); |
| 642 EXPECT_FALSE(toolbar_actions_bar->popped_out_action()); | 641 EXPECT_FALSE(toolbar_actions_bar->popped_out_action()); |
| 643 } | 642 } |
| OLD | NEW |