172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/browser_action_test_util.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_browsertest.h" 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/extensions/extension_service.h" 821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/browser_actions_container.h" 11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/common/extensions/extension_action.h" 12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/common/extensions/extension_resource.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BrowserActionsContainerTest : public ExtensionBrowserTest { 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch BrowserActionsContainerTest() : browser_(NULL) { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~BrowserActionsContainerTest() {} 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual Browser* CreateBrowser(Profile* profile) { 21201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch browser_ = InProcessBrowserTest::CreateBrowser(profile); 22201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch browser_actions_bar_.reset(new BrowserActionTestUtil(browser_)); 23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return browser_; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Browser* browser() { return browser_; } 27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowserActionTestUtil* browser_actions_bar() { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return browser_actions_bar_.get(); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure extension with index |extension_index| has an icon. 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void EnsureExtensionHasIcon(int extension_index) { 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!browser_actions_bar_->HasIcon(extension_index)) { 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The icon is loaded asynchronously and a notification is then sent to 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // observers. So we wait on it. 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_actions_bar_->WaitForBrowserActionUpdated(extension_index); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(browser_actions_bar()->HasIcon(extension_index)); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<BrowserActionTestUtil> browser_actions_bar_; 44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Browser* browser_; // Weak. 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test the basic functionality. 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(BrowserActionsContainerTest, Basic) { 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowserActionsContainer::disable_animations_during_testing_ = true; 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Load an extension with no browser action. 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("browser_action") 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("none"))); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This extension should not be in the model (has no browser action). 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, browser_actions_bar()->NumberOfBrowserActions()); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Load an extension with a browser action. 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("browser_action") 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("basics"))); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureExtensionHasIcon(0); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Unload the extension. 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string id = browser_actions_bar()->GetExtensionId(0); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UnloadExtension(id); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, browser_actions_bar()->NumberOfBrowserActions()); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(mpcomplete): http://code.google.com/p/chromium/issues/detail?id=38992 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(BrowserActionsContainerTest, Visibility) { 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowserActionsContainer::disable_animations_during_testing_ = true; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch base::TimeTicks start_time = base::TimeTicks::Now(); 77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Load extension A (contains browser action). 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("browser_action") 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("basics"))); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureExtensionHasIcon(0); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string idA = browser_actions_bar()->GetExtensionId(0); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Load extension A done : " 88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Load extension B (contains browser action). 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("browser_action") 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("add_popup"))); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, browser_actions_bar()->NumberOfBrowserActions()); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureExtensionHasIcon(0); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string idB = browser_actions_bar()->GetExtensionId(1); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Load extension B done : " 101201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_NE(idA, idB); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Load extension C (contains browser action). 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("browser_action") 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("remove_popup"))); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, browser_actions_bar()->NumberOfBrowserActions()); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureExtensionHasIcon(2); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions()); 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string idC = browser_actions_bar()->GetExtensionId(2); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 115201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Load extension C done : " 116201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 117201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 118201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Change container to show only one action, rest in overflow: A, [B, C]. 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_actions_bar()->SetIconVisibilityCount(1); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Icon visibility count 1: " 124201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 125201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 126201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Disable extension A (should disappear). State becomes: B [C]. 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DisableExtension(idA); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, browser_actions_bar()->NumberOfBrowserActions()); 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(idB, browser_actions_bar()->GetExtensionId(0)); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Disable extension A : " 134201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 135201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 136201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enable A again. A should get its spot in the same location and the bar 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // should not grow (chevron is showing). For details: http://crbug.com/35349. 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // State becomes: A, [B, C]. 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnableExtension(idA); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, browser_actions_bar()->NumberOfBrowserActions()); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(idA, browser_actions_bar()->GetExtensionId(0)); 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 145201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Enable extension A : " 146201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 147201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 148201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Disable C (in overflow). State becomes: A, [B]. 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DisableExtension(idC); 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, browser_actions_bar()->NumberOfBrowserActions()); 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 1533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(idA, browser_actions_bar()->GetExtensionId(0)); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 155201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Disable extension C : " 156201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 157201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 158201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enable C again. State becomes: A, [B, C]. 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnableExtension(idC); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, browser_actions_bar()->NumberOfBrowserActions()); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 1633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(idA, browser_actions_bar()->GetExtensionId(0)); 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 165201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Enable extension C : " 166201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 167201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 168201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now we have 3 extensions. Make sure they are all visible. State: A, B, C. 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_actions_bar()->SetIconVisibilityCount(3); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions()); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Checkpoint : " 174201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 176201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Disable extension A (should disappear). State becomes: B, C. 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DisableExtension(idA); 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, browser_actions_bar()->NumberOfBrowserActions()); 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); 1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(idB, browser_actions_bar()->GetExtensionId(0)); 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 183201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Disable extension A : " 184201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 185201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 186201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Disable extension B (should disappear). State becomes: C. 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DisableExtension(idB); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 1913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(idC, browser_actions_bar()->GetExtensionId(0)); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 193201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Disable extension B : " 194201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 195201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 196201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enable B (makes B and C showing now). State becomes: B, C. 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnableExtension(idB); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, browser_actions_bar()->NumberOfBrowserActions()); 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions()); 2013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(idB, browser_actions_bar()->GetExtensionId(0)); 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 203201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Enable extension B : " 204201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 205201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 206201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enable A (makes A, B and C showing now). State becomes: B, C, A. 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnableExtension(idA); 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, browser_actions_bar()->NumberOfBrowserActions()); 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, browser_actions_bar()->VisibleBrowserActions()); 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(idA, browser_actions_bar()->GetExtensionId(2)); 212201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 213201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Test complete : " 214201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << (base::TimeTicks::Now() - start_time).InMilliseconds() 215201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch << " ms" << std::flush; 216201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 217201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 218201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(BrowserActionsContainerTest, ForceHide) { 219201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch BrowserActionsContainer::disable_animations_during_testing_ = true; 220201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 221201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Load extension A (contains browser action). 222201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") 223201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch .AppendASCII("browser_action") 224201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch .AppendASCII("basics"))); 225201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, browser_actions_bar()->NumberOfBrowserActions()); 226201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EnsureExtensionHasIcon(0); 227201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 228201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string idA = browser_actions_bar()->GetExtensionId(0); 229201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 230201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Force hide this browser action. 23121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ExtensionService* service = browser()->profile()->GetExtensionService(); 232201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch service->SetBrowserActionVisibility(service->GetExtensionById(idA, false), 233201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch false); 234201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, browser_actions_bar()->VisibleBrowserActions()); 235201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 236201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ReloadExtension(idA); 237201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 238201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The browser action should become visible again. 239201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, browser_actions_bar()->VisibleBrowserActions()); 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 241731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 242731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickIN_PROC_BROWSER_TEST_F(BrowserActionsContainerTest, TestCrash57536) { 243201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Test starting\n" << std::flush; 244731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 24521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ExtensionService* service = browser()->profile()->GetExtensionService(); 246731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const size_t size_before = service->extensions()->size(); 247731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 248201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Loading extension\n" << std::flush; 249731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 250731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Load extension A (contains browser action). 251731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test") 252731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick .AppendASCII("browser_action") 253731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick .AppendASCII("crash_57536"))); 254731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 255513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* extension = service->extensions()->at(size_before); 256731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Creating bitmap\n" << std::flush; 258731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 259731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Create and cache and empty bitmap. 260731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SkBitmap bitmap; 261731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bitmap.setConfig(SkBitmap::kARGB_8888_Config, 262731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Extension::kBrowserActionIconMaxSize, 263731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Extension::kBrowserActionIconMaxSize); 264731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bitmap.allocPixels(); 265731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 266201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Set as cached image\n" << std::flush; 267731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 268731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick gfx::Size size(Extension::kBrowserActionIconMaxSize, 269731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Extension::kBrowserActionIconMaxSize); 270731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick extension->SetCachedImage( 271731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick extension->GetResource(extension->browser_action()->default_icon_path()), 272731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bitmap, 273731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick size); 274731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 275201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Disabling extension\n" << std::flush; 276731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DisableExtension(extension->id()); 277201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Enabling extension\n" << std::flush; 278731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EnableExtension(extension->id()); 279201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LOG(INFO) << "Test ending\n" << std::flush; 280731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 281