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

Unified Diff: chrome/browser/tab_contents/spelling_menu_observer_browsertest.cc

Issue 178193005: Move render_view_context_menu.* related files out of tab_contents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: context_menu->renderer_context_menu for disambiguation Created 6 years, 10 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/tab_contents/spelling_menu_observer_browsertest.cc
diff --git a/chrome/browser/tab_contents/spelling_menu_observer_browsertest.cc b/chrome/browser/tab_contents/spelling_menu_observer_browsertest.cc
deleted file mode 100644
index c523a435be86c27a178c82b2eea28bb862818f84..0000000000000000000000000000000000000000
--- a/chrome/browser/tab_contents/spelling_menu_observer_browsertest.cc
+++ /dev/null
@@ -1,481 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/tab_contents/spelling_menu_observer.h"
-
-#include <vector>
-
-#include "base/command_line.h"
-#include "base/prefs/pref_service.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/spellchecker/spelling_service_client.h"
-#include "chrome/browser/tab_contents/render_view_context_menu.h"
-#include "chrome/browser/tab_contents/render_view_context_menu_observer.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "chrome/test/base/testing_profile.h"
-
-using content::RenderViewHost;
-using content::WebContents;
-
-namespace {
-
-// A mock context menu used in this test. This class overrides virtual methods
-// derived from the RenderViewContextMenuProxy class to monitor calls from the
-// SpellingMenuObserver class.
-class MockRenderViewContextMenu : public RenderViewContextMenuProxy {
- public:
- // A menu item used in this test. This test uses a vector of this struct to
- // hold menu items added by this test.
- struct MockMenuItem {
- MockMenuItem()
- : command_id(0),
- enabled(false),
- checked(false),
- hidden(true) {
- }
- int command_id;
- bool enabled;
- bool checked;
- bool hidden;
- base::string16 title;
- };
-
- explicit MockRenderViewContextMenu(bool incognito);
- virtual ~MockRenderViewContextMenu();
-
- // RenderViewContextMenuProxy implementation.
- virtual void AddMenuItem(int command_id,
- const base::string16& title) OVERRIDE;
- virtual void AddCheckItem(int command_id,
- const base::string16& title) OVERRIDE;
- virtual void AddSeparator() OVERRIDE;
- virtual void AddSubMenu(int command_id,
- const base::string16& label,
- ui::MenuModel* model) OVERRIDE;
- virtual void UpdateMenuItem(int command_id,
- bool enabled,
- bool hidden,
- const base::string16& title) OVERRIDE;
- virtual RenderViewHost* GetRenderViewHost() const OVERRIDE;
- virtual WebContents* GetWebContents() const OVERRIDE;
- virtual Profile* GetProfile() const OVERRIDE;
-
- // Attaches a RenderViewContextMenuObserver to be tested.
- void SetObserver(RenderViewContextMenuObserver* observer);
-
- // Returns the number of items added by the test.
- size_t GetMenuSize() const;
-
- // Returns the i-th item.
- bool GetMenuItem(size_t i, MockMenuItem* item) const;
-
- // Returns the writable profile used in this test.
- PrefService* GetPrefs();
-
- private:
- // An observer used for initializing the status of menu items added in this
- // test. A test should delete this RenderViewContextMenuObserver object.
- RenderViewContextMenuObserver* observer_;
-
- // A dummy profile used in this test. Call GetPrefs() when a test needs to
- // change this profile and use PrefService methods.
- scoped_ptr<TestingProfile> profile_;
-
- // A list of menu items added by the SpellingMenuObserver class.
- std::vector<MockMenuItem> items_;
-
- DISALLOW_COPY_AND_ASSIGN(MockRenderViewContextMenu);
-};
-
-MockRenderViewContextMenu::MockRenderViewContextMenu(bool incognito)
- : observer_(NULL) {
- TestingProfile::Builder builder;
- if (incognito)
- builder.SetIncognito();
- profile_ = builder.Build();
-}
-
-MockRenderViewContextMenu::~MockRenderViewContextMenu() {
-}
-
-void MockRenderViewContextMenu::AddMenuItem(int command_id,
- const base::string16& title) {
- MockMenuItem item;
- item.command_id = command_id;
- item.enabled = observer_->IsCommandIdEnabled(command_id);
- item.checked = false;
- item.hidden = false;
- item.title = title;
- items_.push_back(item);
-}
-
-void MockRenderViewContextMenu::AddCheckItem(int command_id,
- const base::string16& title) {
- MockMenuItem item;
- item.command_id = command_id;
- item.enabled = observer_->IsCommandIdEnabled(command_id);
- item.checked = observer_->IsCommandIdChecked(command_id);
- item.hidden = false;
- item.title = title;
- items_.push_back(item);
-}
-
-void MockRenderViewContextMenu::AddSeparator() {
- MockMenuItem item;
- item.command_id = -1;
- item.enabled = false;
- item.checked = false;
- item.hidden = false;
- items_.push_back(item);
-}
-
-void MockRenderViewContextMenu::AddSubMenu(int command_id,
- const base::string16& label,
- ui::MenuModel* model) {
- MockMenuItem item;
- item.command_id = -1;
- item.enabled = false;
- item.checked = false;
- item.hidden = false;
- items_.push_back(item);
-}
-
-void MockRenderViewContextMenu::UpdateMenuItem(int command_id,
- bool enabled,
- bool hidden,
- const base::string16& title) {
- for (std::vector<MockMenuItem>::iterator it = items_.begin();
- it != items_.end(); ++it) {
- if (it->command_id == command_id) {
- it->enabled = enabled;
- it->hidden = hidden;
- it->title = title;
- return;
- }
- }
-
- // The SpellingMenuObserver class tries to change a menu item not added by the
- // class. This is an unexpected behavior and we should stop now.
- FAIL();
-}
-
-RenderViewHost* MockRenderViewContextMenu::GetRenderViewHost() const {
- return NULL;
-}
-
-WebContents* MockRenderViewContextMenu::GetWebContents() const {
- return NULL;
-}
-
-Profile* MockRenderViewContextMenu::GetProfile() const {
- return profile_.get();
-}
-
-size_t MockRenderViewContextMenu::GetMenuSize() const {
- return items_.size();
-}
-
-bool MockRenderViewContextMenu::GetMenuItem(size_t i,
- MockMenuItem* item) const {
- if (i >= items_.size())
- return false;
- item->command_id = items_[i].command_id;
- item->enabled = items_[i].enabled;
- item->checked = items_[i].checked;
- item->hidden = items_[i].hidden;
- item->title = items_[i].title;
- return true;
-}
-
-void MockRenderViewContextMenu::SetObserver(
- RenderViewContextMenuObserver* observer) {
- observer_ = observer;
-}
-
-PrefService* MockRenderViewContextMenu::GetPrefs() {
- return profile_->GetPrefs();
-}
-
-// A test class used in this file. This test should be a browser test because it
-// accesses resources.
-class SpellingMenuObserverTest : public InProcessBrowserTest {
- public:
- SpellingMenuObserverTest();
-
- virtual void SetUpOnMainThread() OVERRIDE {
- Reset(false);
- }
-
- virtual void CleanUpOnMainThread() OVERRIDE {
- observer_.reset();
- menu_.reset();
- }
-
- void Reset(bool incognito) {
- observer_.reset();
- menu_.reset(new MockRenderViewContextMenu(incognito));
- observer_.reset(new SpellingMenuObserver(menu_.get()));
- menu_->SetObserver(observer_.get());
- }
-
- void InitMenu(const char* word, const char* suggestion) {
- content::ContextMenuParams params;
- params.is_editable = true;
- params.misspelled_word = base::ASCIIToUTF16(word);
- params.dictionary_suggestions.clear();
- if (suggestion)
- params.dictionary_suggestions.push_back(base::ASCIIToUTF16(suggestion));
- observer_->InitMenu(params);
- }
-
- virtual ~SpellingMenuObserverTest();
- MockRenderViewContextMenu* menu() { return menu_.get(); }
- SpellingMenuObserver* observer() { return observer_.get(); }
- private:
- scoped_ptr<SpellingMenuObserver> observer_;
- scoped_ptr<MockRenderViewContextMenu> menu_;
- DISALLOW_COPY_AND_ASSIGN(SpellingMenuObserverTest);
-};
-
-SpellingMenuObserverTest::SpellingMenuObserverTest() {
-}
-
-SpellingMenuObserverTest::~SpellingMenuObserverTest() {
-}
-
-} // namespace
-
-// Tests that right-clicking a correct word does not add any items.
-IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, InitMenuWithCorrectWord) {
- InitMenu("", NULL);
- EXPECT_EQ(static_cast<size_t>(0), menu()->GetMenuSize());
-}
-
-// Tests that right-clicking a misspelled word adds four items:
-// "No spelling suggestions", "Add to dictionary", "Ask Google for suggestions",
-// and a separator.
-IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, InitMenuWithMisspelledWord) {
- InitMenu("wiimode", NULL);
- EXPECT_EQ(static_cast<size_t>(4), menu()->GetMenuSize());
-
- // Read all the context-menu items added by this test and verify they are
- // expected ones. We do not check the item titles to prevent resource changes
- // from breaking this test. (I think it is not expected by those who change
- // resources.)
- MockRenderViewContextMenu::MockMenuItem item;
- menu()->GetMenuItem(0, &item);
- EXPECT_EQ(IDC_CONTENT_CONTEXT_NO_SPELLING_SUGGESTIONS, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
- menu()->GetMenuItem(1, &item);
- EXPECT_EQ(IDC_SPELLCHECK_ADD_TO_DICTIONARY, item.command_id);
- EXPECT_TRUE(item.enabled);
- EXPECT_FALSE(item.hidden);
- menu()->GetMenuItem(2, &item);
- EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE, item.command_id);
- EXPECT_TRUE(item.enabled);
- EXPECT_FALSE(item.checked);
- EXPECT_FALSE(item.hidden);
- menu()->GetMenuItem(3, &item);
- EXPECT_EQ(-1, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-}
-
-// Tests that right-clicking a correct word when we enable spelling-service
-// integration to verify an item "Ask Google for suggestions" is checked. Even
-// though this meanu itself does not add this item, its sub-menu adds the item
-// and calls SpellingMenuObserver::IsChecked() to check it.
-IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest,
- EnableSpellingServiceWithCorrectWord) {
- menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true);
- InitMenu("", NULL);
-
- EXPECT_TRUE(
- observer()->IsCommandIdChecked(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE));
-}
-
-// Tests that right-clicking a misspelled word when we enable spelling-service
-// integration to verify an item "Ask Google for suggestions" is checked. (This
-// test does not actually send JSON-RPC requests to the service because it makes
-// this test flaky.)
-IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, EnableSpellingService) {
- menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true);
- menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, std::string());
-
- InitMenu("wiimode", NULL);
- EXPECT_EQ(static_cast<size_t>(4), menu()->GetMenuSize());
-
- // To avoid duplicates, this test reads only the "Ask Google for suggestions"
- // item and verifies it is enabled and checked.
- MockRenderViewContextMenu::MockMenuItem item;
- menu()->GetMenuItem(2, &item);
- EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE, item.command_id);
- EXPECT_TRUE(item.enabled);
- EXPECT_TRUE(item.checked);
- EXPECT_FALSE(item.hidden);
-}
-
-// Test that there will be a separator after "no suggestions" if
-// SpellingServiceClient::SUGGEST is on.
-IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, SeparatorAfterSuggestions) {
- menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true);
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- command_line->AppendSwitch(switches::kUseSpellingSuggestions);
-
- // Force a non-empty locale so SUGGEST is available.
- menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, "en");
- EXPECT_TRUE(SpellingServiceClient::IsAvailable(menu()->GetProfile(),
- SpellingServiceClient::SUGGEST));
-
- InitMenu("jhhj", NULL);
-
- // The test should see a top separator, "No spelling suggestions",
- // "No more Google suggestions" (from SpellingService) and a separator
- // as the first four items, then possibly more (not relevant here).
- EXPECT_LT(4U, menu()->GetMenuSize());
-
- MockRenderViewContextMenu::MockMenuItem item;
- menu()->GetMenuItem(0, &item);
- EXPECT_EQ(-1, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-
- menu()->GetMenuItem(1, &item);
- EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-
- menu()->GetMenuItem(2, &item);
- EXPECT_EQ(IDC_CONTENT_CONTEXT_NO_SPELLING_SUGGESTIONS, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-
- menu()->GetMenuItem(3, &item);
- EXPECT_EQ(-1, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-}
-
-// Test that we don't show "No more suggestions from Google" if the spelling
-// service is enabled and that there is only one suggestion.
-IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest,
- NoMoreSuggestionsNotDisplayed) {
- menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true);
-
- // Force a non-empty locale so SPELLCHECK is available.
- menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, "en");
- EXPECT_TRUE(SpellingServiceClient::IsAvailable(menu()->GetProfile(),
- SpellingServiceClient::SPELLCHECK));
- InitMenu("asdfkj", "asdf");
-
- // The test should see a separator, a suggestion and another separator
- // as the first two items, then possibly more (not relevant here).
- EXPECT_LT(3U, menu()->GetMenuSize());
-
- MockRenderViewContextMenu::MockMenuItem item;
- menu()->GetMenuItem(0, &item);
- EXPECT_EQ(-1, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-
- menu()->GetMenuItem(1, &item);
- EXPECT_EQ(IDC_SPELLCHECK_SUGGESTION_0, item.command_id);
- EXPECT_TRUE(item.enabled);
- EXPECT_FALSE(item.hidden);
-
- menu()->GetMenuItem(2, &item);
- EXPECT_EQ(-1, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-}
-
-// Test that "Ask Google For Suggestions" is grayed out when using an
-// off the record profile.
-// TODO(rlp): Include graying out of autocorrect in this test when autocorrect
-// is functional.
-IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest,
- NoSpellingServiceWhenOffTheRecord) {
- // Create a menu in an incognito profile.
- Reset(true);
-
- // This means spellchecking is allowed. Default is that the service is
- // contacted but this test makes sure that if profile is incognito, that
- // is not an option.
- menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true);
-
- // Force a non-empty locale so SUGGEST normally would be available.
- menu()->GetPrefs()->SetString(prefs::kSpellCheckDictionary, "en");
- EXPECT_FALSE(SpellingServiceClient::IsAvailable(menu()->GetProfile(),
- SpellingServiceClient::SUGGEST));
- EXPECT_FALSE(SpellingServiceClient::IsAvailable(menu()->GetProfile(),
- SpellingServiceClient::SPELLCHECK));
-
- InitMenu("sjxdjiiiiii", NULL);
-
- // The test should see "No spelling suggestions" (from system checker).
- // They should not see "No more Google suggestions" (from SpellingService) or
- // a separator. The next 2 items should be "Add to Dictionary" followed
- // by "Ask Google for suggestions" which should be disabled.
- // TODO(rlp): add autocorrect here when it is functional.
- EXPECT_LT(3U, menu()->GetMenuSize());
-
- MockRenderViewContextMenu::MockMenuItem item;
- menu()->GetMenuItem(0, &item);
- EXPECT_EQ(IDC_CONTENT_CONTEXT_NO_SPELLING_SUGGESTIONS, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-
- menu()->GetMenuItem(1, &item);
- EXPECT_EQ(IDC_SPELLCHECK_ADD_TO_DICTIONARY, item.command_id);
- EXPECT_TRUE(item.enabled);
- EXPECT_FALSE(item.hidden);
-
- menu()->GetMenuItem(2, &item);
- EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE, item.command_id);
- EXPECT_FALSE(item.enabled);
- EXPECT_FALSE(item.hidden);
-}
-
-// Test that the menu is preceeded by a separator if there are any suggestions,
-// or if the SpellingServiceClient is available
-IN_PROC_BROWSER_TEST_F(SpellingMenuObserverTest, SuggestionsForceTopSeparator) {
- menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, false);
-
- // First case: Misspelled word, no suggestions, no spellcheck service.
- InitMenu("asdfkj", NULL);
- // See SpellingMenuObserverTest.InitMenuWithMisspelledWord on why 4 items.
- EXPECT_EQ(static_cast<size_t>(4), menu()->GetMenuSize());
- MockRenderViewContextMenu::MockMenuItem item;
- menu()->GetMenuItem(0, &item);
- EXPECT_NE(-1, item.command_id);
-
- // Case #2. Misspelled word, suggestions, no spellcheck service.
- Reset(false);
- menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, false);
- InitMenu("asdfkj", "asdf");
-
- // Expect at least separator and 4 default entries.
- EXPECT_LT(static_cast<size_t>(5), menu()->GetMenuSize());
- // This test only cares that the first one is a separator.
- menu()->GetMenuItem(0, &item);
- EXPECT_EQ(-1, item.command_id);
-
- // Case #3. Misspelled word, suggestion service is on.
- Reset(false);
- menu()->GetPrefs()->SetBoolean(prefs::kSpellCheckUseSpellingService, true);
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- command_line->AppendSwitch(switches::kUseSpellingSuggestions);
- InitMenu("asdfkj", NULL);
-
- // Should have at least 2 entries. Separator, suggestion.
- EXPECT_LT(2U, menu()->GetMenuSize());
- menu()->GetMenuItem(0, &item);
- EXPECT_EQ(-1, item.command_id);
- menu()->GetMenuItem(1, &item);
- EXPECT_EQ(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION, item.command_id);
-}
« no previous file with comments | « chrome/browser/tab_contents/spelling_menu_observer.cc ('k') | chrome/browser/translate/translate_manager_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698