spelling_menu_observer_browsertest.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Copyright 2014 The Chromium Authors. All rights reserved. 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Use of this source code is governed by a BSD-style license that can be 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// found in the LICENSE file. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include <vector> 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "base/prefs/pref_service.h" 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "base/strings/utf_string_conversions.h" 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "chrome/app/chrome_command_ids.h" 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "chrome/browser/renderer_context_menu/render_view_context_menu.h" 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "chrome/browser/spellchecker/spelling_service_client.h" 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "chrome/common/pref_names.h" 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "chrome/test/base/in_process_browser_test.h" 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "chrome/test/base/testing_profile.h" 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "components/renderer_context_menu/render_view_context_menu_observer.h" 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgusing content::RenderViewHost; 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgusing content::WebContents; 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgnamespace { 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// A mock context menu used in this test. This class overrides virtual methods 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// derived from the RenderViewContextMenuProxy class to monitor calls from the 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// SpellingMenuObserver class. 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgclass MockRenderViewContextMenu : public RenderViewContextMenuProxy { 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org public: 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // A menu item used in this test. This test uses a vector of this struct to 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // hold menu items added by this test. 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct MockMenuItem { 32760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org MockMenuItem() 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org : command_id(0), 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org enabled(false), 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org checked(false), 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org hidden(true) { 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int command_id; 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bool enabled; 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bool checked; 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bool hidden; 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org base::string16 title; 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org }; 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org explicit MockRenderViewContextMenu(bool incognito); 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual ~MockRenderViewContextMenu(); 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // RenderViewContextMenuProxy implementation. 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual void AddMenuItem(int command_id, 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const base::string16& title) OVERRIDE; 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual void AddCheckItem(int command_id, 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const base::string16& title) OVERRIDE; 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual void AddSeparator() OVERRIDE; 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual void AddSubMenu(int command_id, 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const base::string16& label, 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ui::MenuModel* model) OVERRIDE; 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual void UpdateMenuItem(int command_id, 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bool enabled, 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bool hidden, 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const base::string16& title) OVERRIDE; 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual RenderViewHost* GetRenderViewHost() const OVERRIDE; 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual WebContents* GetWebContents() const OVERRIDE; 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual content::BrowserContext* GetBrowserContext() const OVERRIDE; 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Attaches a RenderViewContextMenuObserver to be tested. 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org void SetObserver(RenderViewContextMenuObserver* observer); 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Returns the number of items added by the test. 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org size_t GetMenuSize() const; 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Returns the i-th item. 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bool GetMenuItem(size_t i, MockMenuItem* item) const; 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Returns the writable profile used in this test. 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PrefService* GetPrefs(); 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org private: 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // An observer used for initializing the status of menu items added in this 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // test. A test should delete this RenderViewContextMenuObserver object. 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org RenderViewContextMenuObserver* observer_; 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // A dummy profile used in this test. Call GetPrefs() when a test needs to 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // change this profile and use PrefService methods. 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org scoped_ptr<TestingProfile> profile_; 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // A list of menu items added by the SpellingMenuObserver class. 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org std::vector<MockMenuItem> items_; 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org DISALLOW_COPY_AND_ASSIGN(MockRenderViewContextMenu); 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgMockRenderViewContextMenu::MockRenderViewContextMenu(bool incognito) 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org : observer_(NULL) { 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TestingProfile::Builder builder; 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (incognito) 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org builder.SetIncognito(); 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org profile_ = builder.Build(); 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgMockRenderViewContextMenu::~MockRenderViewContextMenu() { 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid MockRenderViewContextMenu::AddMenuItem(int command_id, 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const base::string16& title) { 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockMenuItem item; 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.command_id = command_id; 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.enabled = observer_->IsCommandIdEnabled(command_id); 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.checked = false; 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.hidden = false; 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.title = title; 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org items_.push_back(item); 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid MockRenderViewContextMenu::AddCheckItem(int command_id, 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const base::string16& title) { 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockMenuItem item; 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.command_id = command_id; 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.enabled = observer_->IsCommandIdEnabled(command_id); 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.checked = observer_->IsCommandIdChecked(command_id); 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.hidden = false; 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.title = title; 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org items_.push_back(item); 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid MockRenderViewContextMenu::AddSeparator() { 1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockMenuItem item; 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.command_id = -1; 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.enabled = false; 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.checked = false; 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.hidden = false; 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org items_.push_back(item); 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid MockRenderViewContextMenu::AddSubMenu(int command_id, 1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const base::string16& label, 1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ui::MenuModel* model) { 1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockMenuItem item; 1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.command_id = -1; 1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.enabled = false; 1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.checked = false; 1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item.hidden = false; 1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org items_.push_back(item); 1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid MockRenderViewContextMenu::UpdateMenuItem(int command_id, 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bool enabled, 1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org bool hidden, 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const base::string16& title) { 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (std::vector<MockMenuItem>::iterator it = items_.begin(); 1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org it != items_.end(); ++it) { 1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (it->command_id == command_id) { 1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org it->enabled = enabled; 1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org it->hidden = hidden; 1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org it->title = title; 1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // The SpellingMenuObserver class tries to change a menu item not added by the 1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // class. This is an unexpected behavior and we should stop now. 1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org FAIL(); 1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgRenderViewHost* MockRenderViewContextMenu::GetRenderViewHost() const { 1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return NULL; 1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgWebContents* MockRenderViewContextMenu::GetWebContents() const { 1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return NULL; 1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgcontent::BrowserContext* MockRenderViewContextMenu::GetBrowserContext() const { 1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return profile_.get(); 1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgsize_t MockRenderViewContextMenu::GetMenuSize() const { 1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return items_.size(); 1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgbool MockRenderViewContextMenu::GetMenuItem(size_t i, 1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockMenuItem* item) const { 1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (i >= items_.size()) 1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return false; 1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item->command_id = items_[i].command_id; 1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item->enabled = items_[i].enabled; 1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item->checked = items_[i].checked; 1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item->hidden = items_[i].hidden; 1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org item->title = items_[i].title; 1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return true; 1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid MockRenderViewContextMenu::SetObserver( 1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org RenderViewContextMenuObserver* observer) { 1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org observer_ = observer; 1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgPrefService* MockRenderViewContextMenu::GetPrefs() { 1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return profile_->GetPrefs(); 1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// A test class used in this file. This test should be a browser test because it 2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// accesses resources. 2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgclass SpellingMenuObserverTest : public InProcessBrowserTest { 2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org public: 2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SpellingMenuObserverTest(); 2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual void SetUpOnMainThread() OVERRIDE { 2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Reset(false); 2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual void TearDownOnMainThread() OVERRIDE { 2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org observer_.reset(); 2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu_.reset(); 2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org void Reset(bool incognito) { 2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org observer_.reset(); 2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu_.reset(new MockRenderViewContextMenu(incognito)); 2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org observer_.reset(new SpellingMenuObserver(menu_.get())); 2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu_->SetObserver(observer_.get()); 2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org void InitMenu(const char* word, const char* suggestion) { 2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org content::ContextMenuParams params; 2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org params.is_editable = true; 2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org params.misspelled_word = base::ASCIIToUTF16(word); 2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org params.dictionary_suggestions.clear(); 2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (suggestion) 2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org params.dictionary_suggestions.push_back(base::ASCIIToUTF16(suggestion)); 2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org observer_->InitMenu(params); 2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org void ForceSuggestMode() { 2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true); 2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Force a non-empty and non-"en" locale so SUGGEST is available. 2363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, "fr"); 2373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ASSERT_TRUE(SpellingServiceClient::IsAvailable( 2383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetBrowserContext(), SpellingServiceClient::SUGGEST)); 2393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ASSERT_FALSE(SpellingServiceClient::IsAvailable( 2403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetBrowserContext(), SpellingServiceClient::SPELLCHECK)); 2413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org virtual ~SpellingMenuObserverTest(); 2443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockRenderViewContextMenu* menu() { return menu_.get(); } 2453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SpellingMenuObserver* observer() { return observer_.get(); } 2463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org private: 2473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org scoped_ptr<SpellingMenuObserver> observer_; 2483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org scoped_ptr<MockRenderViewContextMenu> menu_; 2493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org DISALLOW_COPY_AND_ASSIGN(SpellingMenuObserverTest); 2503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 2513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgSpellingMenuObserverTest::SpellingMenuObserverTest() { 2533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgSpellingMenuObserverTest::~SpellingMenuObserverTest() { 2563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} // namespace 2593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Tests that right-clicking a correct word does not add any items. 2613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, InitMenuWithCorrectWord) { 2623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("", NULL); 2633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(static_cast<size_t>(0), menu()->GetMenuSize()); 2643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Tests that right-clicking a misspelled word adds four items: 2673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// "No spelling suggestions", "Add to dictionary", "Ask Google for suggestions", 2683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// and a separator. 2693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, InitMenuWithMisspelledWord) { 2703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("wiimode", NULL); 2713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(static_cast<size_t>(4), menu()->GetMenuSize()); 2723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Read all the context-menu items added by this test and verify they are 2743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // expected ones. We do not check the item titles to prevent resource changes 2753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // from breaking this test. (I think it is not expected by those who change 2763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // resources.) 2773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockRenderViewContextMenu::MockMenuItem item; 2783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(0, &item); 2793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_CONTENT_CONTEXT_NO_SPELLING_SUGGESTIONS, item.command_id); 2803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 2813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 2823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(1, &item); 2833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_SPELLCHECK_ADD_TO_DICTIONARY, item.command_id); 2843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_TRUE(item.enabled); 2853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 2863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(2, &item); 2873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE, item.command_id); 2883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_TRUE(item.enabled); 2893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.checked); 2903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 2913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(3, &item); 2923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(-1, item.command_id); 2933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 2943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 2953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Tests that right-clicking a correct word when we enable spelling-service 2983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// integration to verify an item "Ask Google for suggestions" is checked. Even 2993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// though this meanu itself does not add this item, its sub-menu adds the item 3003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// and calls SpellingMenuObserver::IsChecked() to check it. 3013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, 3023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EnableSpellingServiceWithCorrectWord) { 3033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true); 3043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("", NULL); 3053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_TRUE( 3073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org observer()->IsCommandIdChecked(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE)); 3083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Tests that right-clicking a misspelled word when we enable spelling-service 3113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// integration to verify an item "Ask Google for suggestions" is checked. (This 3123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// test does not actually send JSON-RPC requests to the service because it makes 3133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// this test flaky.) 3143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, EnableSpellingService) { 3153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true); 3163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, std::string()); 3173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("wiimode", NULL); 3193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(static_cast<size_t>(4), menu()->GetMenuSize()); 3203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // To avoid duplicates, this test reads only the "Ask Google for suggestions" 3223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // item and verifies it is enabled and checked. 3233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockRenderViewContextMenu::MockMenuItem item; 3243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(2, &item); 3253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE, item.command_id); 3263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_TRUE(item.enabled); 3273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_TRUE(item.checked); 3283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 3293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Test that there will be a separator after "no suggestions" if 3323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// SpellingServiceClient::SUGGEST is on. 3333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, SeparatorAfterSuggestions) { 3343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ForceSuggestMode(); 3353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("jhhj", NULL); 3363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // The test should see a top separator, "No spelling suggestions", 3383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // "No more Google suggestions" (from SpellingService) and a separator 3393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // as the first four items, then possibly more (not relevant here). 3403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_LT(4U, menu()->GetMenuSize()); 3413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockRenderViewContextMenu::MockMenuItem item; 3433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(0, &item); 3443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(-1, item.command_id); 3453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 3463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 3473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(1, &item); 3493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION, item.command_id); 3503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 3513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 3523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(2, &item); 3543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_CONTENT_CONTEXT_NO_SPELLING_SUGGESTIONS, item.command_id); 3553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 3563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 3573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(3, &item); 3593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(-1, item.command_id); 3603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 3613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 3623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Test that we don't show "No more suggestions from Google" if the spelling 3653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// service is enabled and that there is only one suggestion. 3663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, 3673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NoMoreSuggestionsNotDisplayed) { 3683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true); 3693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Force a non-empty locale so SPELLCHECK is available. 3713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, "en"); 3723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_TRUE(SpellingServiceClient::IsAvailable( 3733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetBrowserContext(), SpellingServiceClient::SPELLCHECK)); 3743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("asdfkj", "asdf"); 3753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // The test should see a separator, a suggestion and another separator 3773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // as the first two items, then possibly more (not relevant here). 3783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_LT(3U, menu()->GetMenuSize()); 3793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockRenderViewContextMenu::MockMenuItem item; 3813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(0, &item); 3823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(-1, item.command_id); 3833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 3843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 3853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(1, &item); 3873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_SPELLCHECK_SUGGESTION_0, item.command_id); 3883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_TRUE(item.enabled); 3893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 3903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(2, &item); 3923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(-1, item.command_id); 3933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 3943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 3953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Test that "Ask Google For Suggestions" is grayed out when using an 3983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// off the record profile. 3993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// TODO(rlp): Include graying out of autocorrect in this test when autocorrect 4003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// is functional. 4013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, 4023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org NoSpellingServiceWhenOffTheRecord) { 4033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Create a menu in an incognito profile. 4043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Reset(true); 4053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // This means spellchecking is allowed. Default is that the service is 4073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // contacted but this test makes sure that if profile is incognito, that 4083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // is not an option. 4093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true); 4103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Force a non-empty locale so SUGGEST normally would be available. 4123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, "en"); 4133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(SpellingServiceClient::IsAvailable( 4143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetBrowserContext(), SpellingServiceClient::SUGGEST)); 4153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(SpellingServiceClient::IsAvailable( 4163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetBrowserContext(), SpellingServiceClient::SPELLCHECK)); 4173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("sjxdjiiiiii", NULL); 4193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // The test should see "No spelling suggestions" (from system checker). 4213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // They should not see "No more Google suggestions" (from SpellingService) or 4223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // a separator. The next 2 items should be "Add to Dictionary" followed 4233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // by "Ask Google for suggestions" which should be disabled. 4243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // TODO(rlp): add autocorrect here when it is functional. 4253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_LT(3U, menu()->GetMenuSize()); 4263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockRenderViewContextMenu::MockMenuItem item; 4283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(0, &item); 4293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_CONTENT_CONTEXT_NO_SPELLING_SUGGESTIONS, item.command_id); 4303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 4313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 4323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(1, &item); 4343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_SPELLCHECK_ADD_TO_DICTIONARY, item.command_id); 4353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_TRUE(item.enabled); 4363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 4373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(2, &item); 4393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE, item.command_id); 4403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.enabled); 4413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_FALSE(item.hidden); 4423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// Test that the menu is preceeded by a separator if there are any suggestions, 4453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org// or if the SpellingServiceClient is available 4463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgIN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, SuggestionsForceTopSeparator) { 4473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, false); 4483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // First case: Misspelled word, no suggestions, no spellcheck service. 4503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("asdfkj", NULL); 4513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // See SpellingMenuObserverTest.InitMenuWithMisspelledWord on why 4 items. 4523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(static_cast<size_t>(4), menu()->GetMenuSize()); 4533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MockRenderViewContextMenu::MockMenuItem item; 4543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(0, &item); 4553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_NE(-1, item.command_id); 4563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Case #2. Misspelled word, suggestions, no spellcheck service. 4583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Reset(false); 4593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, false); 4603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("asdfkj", "asdf"); 4613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Expect at least separator and 4 default entries. 4633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_LT(static_cast<size_t>(5), menu()->GetMenuSize()); 4643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // This test only cares that the first one is a separator. 4653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(0, &item); 4663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(-1, item.command_id); 4673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Case #3. Misspelled word, suggestion service is on. 4693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Reset(false); 4703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ForceSuggestMode(); 4713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org InitMenu("asdfkj", NULL); 4723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 4733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org // Should have at least 2 entries. Separator, suggestion. 4743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_LT(2U, menu()->GetMenuSize()); 4753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(0, &item); 4763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(-1, item.command_id); 4773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org menu()->GetMenuItem(1, &item); 4783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION, item.command_id); 4793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 4803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org