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" |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 13 #include "chrome/browser/chrome_notification_types.h" |
13 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" | 14 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" |
14 #include "chrome/browser/extensions/browser_action_test_util.h" | 15 #include "chrome/browser/extensions/browser_action_test_util.h" |
15 #include "chrome/browser/extensions/extension_action.h" | 16 #include "chrome/browser/extensions/extension_action.h" |
16 #include "chrome/browser/extensions/extension_action_manager.h" | 17 #include "chrome/browser/extensions/extension_action_manager.h" |
17 #include "chrome/browser/extensions/extension_action_test_util.h" | 18 #include "chrome/browser/extensions/extension_action_test_util.h" |
18 #include "chrome/browser/extensions/extension_browsertest.h" | 19 #include "chrome/browser/extensions/extension_browsertest.h" |
19 #include "chrome/browser/extensions/extension_service.h" | 20 #include "chrome/browser/extensions/extension_service.h" |
20 #include "chrome/browser/sessions/session_tab_helper.h" | 21 #include "chrome/browser/sessions/session_tab_helper.h" |
21 #include "chrome/browser/ui/browser_window.h" | 22 #include "chrome/browser/ui/browser_window.h" |
22 #include "chrome/browser/ui/extensions/extension_action_view_controller.h" | 23 #include "chrome/browser/ui/extensions/extension_action_view_controller.h" |
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); | 630 EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); |
630 ASSERT_TRUE(toolbar_actions_bar->popped_out_action()); | 631 ASSERT_TRUE(toolbar_actions_bar->popped_out_action()); |
631 EXPECT_EQ(extension3->id(), | 632 EXPECT_EQ(extension3->id(), |
632 toolbar_actions_bar->popped_out_action()->GetId()); | 633 toolbar_actions_bar->popped_out_action()->GetId()); |
633 extension_service()->UnloadExtension( | 634 extension_service()->UnloadExtension( |
634 extension3->id(), extensions::UnloadedExtensionInfo::REASON_DISABLE); | 635 extension3->id(), extensions::UnloadedExtensionInfo::REASON_DISABLE); |
635 EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); | 636 EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); |
636 EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); | 637 EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); |
637 EXPECT_FALSE(toolbar_actions_bar->popped_out_action()); | 638 EXPECT_FALSE(toolbar_actions_bar->popped_out_action()); |
638 } | 639 } |
| 640 |
| 641 // A test that runs in incognito mode. |
| 642 class BrowserActionsBarIncognitoTest : public BrowserActionsBarBrowserTest { |
| 643 public: |
| 644 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 645 BrowserActionsBarBrowserTest::SetUpCommandLine(command_line); |
| 646 command_line->AppendSwitch("incognito"); |
| 647 } |
| 648 }; |
| 649 |
| 650 // Tests that first loading an extension action in an incognito profile, then |
| 651 // removing the incognito profile and using the extension action in a normal |
| 652 // profile doesn't crash. |
| 653 // Regression test for crbug.com/663726. |
| 654 IN_PROC_BROWSER_TEST_F(BrowserActionsBarIncognitoTest, IncognitoMode) { |
| 655 EXPECT_TRUE(browser()->profile()->IsOffTheRecord()); |
| 656 const extensions::Extension* extension = LoadExtensionIncognito( |
| 657 test_data_dir_.AppendASCII("api_test/browser_action_with_icon")); |
| 658 ASSERT_TRUE(extension); |
| 659 Browser* second_browser = |
| 660 new Browser(Browser::CreateParams(profile()->GetOriginalProfile())); |
| 661 base::RunLoop().RunUntilIdle(); |
| 662 EXPECT_FALSE(second_browser->profile()->IsOffTheRecord()); |
| 663 |
| 664 content::WindowedNotificationObserver window_close_observer( |
| 665 chrome::NOTIFICATION_BROWSER_CLOSED, content::Source<Browser>(browser())); |
| 666 browser()->window()->Close(); |
| 667 window_close_observer.Wait(); |
| 668 |
| 669 std::vector<ToolbarActionViewController*> actions = |
| 670 second_browser->window()->GetToolbarActionsBar()->GetActions(); |
| 671 ASSERT_EQ(1u, actions.size()); |
| 672 gfx::Image icon = actions[0]->GetIcon( |
| 673 second_browser->tab_strip_model()->GetActiveWebContents(), |
| 674 gfx::Size(ToolbarActionsBar::IconWidth(false), |
| 675 ToolbarActionsBar::IconHeight())); |
| 676 const gfx::ImageSkia* skia = icon.ToImageSkia(); |
| 677 ASSERT_TRUE(skia); |
| 678 // Force the image to try and load a representation. |
| 679 skia->GetRepresentation(2.0); |
| 680 } |
OLD | NEW |