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

Side by Side Diff: chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc

Issue 2537263003: [Extensions] Fix lifetime bug in ExtensionAction/IconImage (Closed)
Patch Set: Created 4 years 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
OLDNEW
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698