15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/toolbar/wrench_menu_model.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h"
8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chrome/browser/prefs/browser_prefs.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/global_error/global_error.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/global_error/global_error_service.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/global_error/global_error_service_factory.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/menu_model_test.h"
17a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chrome/test/base/testing_browser_process.h"
18a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chrome/test/base/testing_io_thread_state.h"
19a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chrome/test/base/testing_pref_service_syncable.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Error class has a menu item.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuError : public GlobalError {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit MenuError(int command_id)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : command_id_(command_id),
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        execute_count_(0) {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int execute_count() { return execute_count_; }
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasMenuItem() OVERRIDE { return true; }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int MenuItemCommandID() OVERRIDE { return command_id_; }
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 MenuItemLabel() OVERRIDE { return base::string16(); }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ExecuteMenuItem(Browser* browser) OVERRIDE { execute_count_++; }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasBubbleView() OVERRIDE { return false; }
420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual bool HasShownBubbleView() OVERRIDE { return false; }
430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual void ShowBubbleView(Browser* browser) OVERRIDE { ADD_FAILURE(); }
440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual GlobalErrorBubbleViewBase* GetBubbleView() OVERRIDE { return NULL; }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int command_id_;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int execute_count_;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MenuError);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WrenchMenuModelTest : public BrowserWithTestWindowTest,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            public ui::AcceleratorProvider {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Don't handle accelerators.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetAcceleratorForCommandId(
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int command_id,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ui::Accelerator* accelerator) OVERRIDE { return false; }
62a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
63a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch protected:
64a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  virtual void SetUp() OVERRIDE {
65a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    prefs_.reset(new TestingPrefServiceSimple());
66a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    chrome::RegisterLocalState(prefs_->registry());
67a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
68a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    TestingBrowserProcess::GetGlobal()->SetLocalState(prefs_.get());
69a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    testing_io_thread_state_.reset(new chrome::TestingIOThreadState());
70a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    BrowserWithTestWindowTest::SetUp();
71a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  }
72a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
73a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  virtual void TearDown() OVERRIDE {
74a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    BrowserWithTestWindowTest::TearDown();
75a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    testing_io_thread_state_.reset();
76a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
77a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    DestroyBrowserAndProfile();
78a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  }
79a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
80a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch private:
81a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  scoped_ptr<TestingPrefServiceSimple> prefs_;
82a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  scoped_ptr<chrome::TestingIOThreadState> testing_io_thread_state_;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copies parts of MenuModelTest::Delegate and combines them with the
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WrenchMenuModel since WrenchMenuModel is now a SimpleMenuModel::Delegate and
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// not derived from SimpleMenuModel.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestWrenchMenuModel : public WrenchMenuModel {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestWrenchMenuModel(ui::AcceleratorProvider* provider,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      Browser* browser)
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      : WrenchMenuModel(provider, browser, false),
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        execute_count_(0),
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        checked_count_(0),
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        enable_count_(0) {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Testing overrides to ui::SimpleMenuModel::Delegate:
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsCommandIdChecked(int command_id) const OVERRIDE {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool val = WrenchMenuModel::IsCommandIdChecked(command_id);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (val)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      checked_count_++;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return val;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++enable_count_;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE {
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ++execute_count_;
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int execute_count_;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable int checked_count_;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable int enable_count_;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WrenchMenuModelTest, Basics) {
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestWrenchMenuModel model(this, browser());
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int itemCount = model.GetItemCount();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Verify it has items. The number varies by platform, so we don't check
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the exact number.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_GT(itemCount, 10);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Execute a couple of the items and make sure it gets back to our delegate.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We can't use CountEnabledExecutable() here because the encoding menu's
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // delegate is internal, it doesn't use the one we pass in.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note: The new menu has a spacing separator at the first slot.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.ActivatedAt(1);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(model.IsEnabledAt(1));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure to use the index that is not separator in all configurations.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.ActivatedAt(2);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(model.IsEnabledAt(2));
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(model.execute_count_, 2);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(model.enable_count_, 2);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.execute_count_ = 0;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.enable_count_ = 0;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Choose something from the bookmark submenu and make sure it makes it back
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to the delegate as well.
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int bookmarksModelIndex = -1;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < itemCount; ++i) {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (model.GetTypeAt(i) == ui::MenuModel::TYPE_SUBMENU) {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bookmarksModelIndex = i;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_GT(bookmarksModelIndex, -1);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::MenuModel* bookmarksModel = model.GetSubmenuModelAt(bookmarksModelIndex);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(bookmarksModel);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The bookmarks model may be empty until we tell it we're going to show it.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bookmarksModel->MenuWillShow();
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_GT(bookmarksModel->GetItemCount(), 1);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bookmarksModel->ActivatedAt(1);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(bookmarksModel->IsEnabledAt(1));
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(model.execute_count_, 1);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(model.enable_count_, 1);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests global error menu items in the wrench menu.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WrenchMenuModelTest, GlobalError) {
1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Make sure services required for tests are initialized.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GlobalErrorService* service =
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GlobalErrorServiceFactory::GetForProfile(browser()->profile());
1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ProfileOAuth2TokenServiceFactory::GetForProfile(browser()->profile());
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int command1 = 1234567;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // AddGlobalError takes ownership of error1.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MenuError* error1 = new MenuError(command1);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  service->AddGlobalError(error1);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int command2 = 1234568;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // AddGlobalError takes ownership of error2.
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MenuError* error2 = new MenuError(command2);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  service->AddGlobalError(error2);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WrenchMenuModel model(this, browser(), false);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int index1 = model.GetIndexOfCommandId(command1);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_GT(index1, -1);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int index2 = model.GetIndexOfCommandId(command2);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_GT(index2, -1);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(model.IsEnabledAt(index1));
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0, error1->execute_count());
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.ActivatedAt(index1);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, error1->execute_count());
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(model.IsEnabledAt(index2));
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0, error2->execute_count());
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.ActivatedAt(index2);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, error1->execute_count());
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EncodingMenuModelTest : public BrowserWithTestWindowTest,
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              public MenuModelTest {
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EncodingMenuModelTest, IsCommandIdCheckedWithNoTabs) {
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EncodingMenuModel model(browser());
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(NULL, browser()->tab_strip_model()->GetActiveWebContents());
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(model.IsCommandIdChecked(IDC_ENCODING_ISO88591));
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205