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

Unified Diff: chrome/browser/instant/instant_test_utils.h

Issue 11592004: InstantExtended: tests! (Closed) Base URL: http://git.chromium.org/chromium/src.git@fixmyterms
Patch Set: Dont have a testing mode. Created 7 years, 12 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/instant/instant_test_utils.h
diff --git a/chrome/browser/instant/instant_test_utils.h b/chrome/browser/instant/instant_test_utils.h
new file mode 100644
index 0000000000000000000000000000000000000000..c6d1e9815dcc55ac7f3dddbf799af21e7c41e666
--- /dev/null
+++ b/chrome/browser/instant/instant_test_utils.h
@@ -0,0 +1,180 @@
+// Copyright 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.
+
+#ifndef CHROME_BROWSER_INSTANT_TEST_UTILS_H_
+#define CHROME_BROWSER_INSTANT_TEST_UTILS_H_
+
+#include "base/command_line.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include "chrome/browser/history/history_service_factory.h"
+#include "chrome/browser/instant/instant_model_observer.h"
+#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/browser/search_engines/template_url_service.h"
+#include "chrome/browser/search_engines/template_url_service_factory.h"
+#include "chrome/browser/task_manager/task_manager.h"
+#include "chrome/browser/task_manager/task_manager_browsertest_util.h"
+#include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/browser_instant_controller.h"
+#include "chrome/browser/ui/browser_tabstrip.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/omnibox/location_bar.h"
+#include "chrome/browser/ui/omnibox/omnibox_view.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_notification_types.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/interactive_test_utils.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/render_process_host.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/result_codes.h"
+#include "content/public/test/browser_test_utils.h"
+
+class InstantTestModelObserver : public InstantModelObserver {
+ public:
+ InstantTestModelObserver(const InstantModel* model,
+ chrome::search::Mode::Type desired_mode_type)
+ : model_(model),
+ desired_mode_type_(desired_mode_type) {
+ model_->AddObserver(this);
+ }
+
+ ~InstantTestModelObserver() {
+ model_->RemoveObserver(this);
+ }
+
+ void WaitUntilDesiredPreviewState() {
+ run_loop_.Run();
+ }
+
+ // Overridden from InstantModelObserver:
+ virtual void PreviewStateChanged(const InstantModel& model) OVERRIDE {
+ if (model.mode().mode == desired_mode_type_)
+ run_loop_.Quit();
+ }
+
+ private:
+ const InstantModel* const model_;
+ const chrome::search::Mode::Type desired_mode_type_;
+ base::RunLoop run_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(InstantTestModelObserver);
+};
+
+class InstantTestBase : public InProcessBrowserTest {
+ protected:
+ void SetupInstant() {
+ CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+ switches::kInstantURL, instant_url_.spec());
+ browser()->profile()->GetPrefs()->SetBoolean(prefs::kInstantEnabled, true);
+ }
+
+ void SetupInstantUsingTemplateURL() {
+ TemplateURLService* service =
+ TemplateURLServiceFactory::GetForProfile(browser()->profile());
+ ui_test_utils::WaitForTemplateURLServiceToLoad(service);
+
+ TemplateURLData data;
+ data.SetURL("http://does/not/exist?q={searchTerms}");
+ data.instant_url = instant_url_.spec();
+
+ TemplateURL* template_url = new TemplateURL(browser()->profile(), data);
+ service->Add(template_url); // Takes ownership of |template_url|.
+ service->SetDefaultSearchProvider(template_url);
+ browser()->profile()->GetPrefs()->SetBoolean(prefs::kInstantEnabled, true);
+ }
+
+ InstantController* instant() {
+ return browser()->instant_controller()->instant();
+ }
+
+ OmniboxView* omnibox() {
+ return browser()->window()->GetLocationBar()->GetLocationEntry();
+ }
+
+ void KillInstantRenderView() {
+ base::KillProcess(
+ instant()->GetPreviewContents()->GetRenderProcessHost()->GetHandle(),
+ content::RESULT_CODE_KILLED,
+ false);
+ }
+
+ void FocusOmnibox() {
+ // If the omnibox already has focus, just notify Instant.
+ if (omnibox()->model()->has_focus()) {
+ instant()->OmniboxFocusChanged(OMNIBOX_FOCUS_VISIBLE,
+ OMNIBOX_FOCUS_CHANGE_EXPLICIT, NULL);
+ }
+ else {
+ browser()->window()->GetLocationBar()->FocusLocation(false);
+ }
+ }
+
+ void FocusOmniboxAndWaitForInstantSupport() {
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_INSTANT_SUPPORT_DETERMINED,
+ content::NotificationService::AllSources());
+ FocusOmnibox();
+ observer.Wait();
+ }
+
+ void SetOmniboxText(const std::string& text) {
+ FocusOmnibox();
+ omnibox()->SetUserText(UTF8ToUTF16(text));
+ }
+
+ void SetOmniboxTextAndWaitForInstantToShow(const std::string& text) {
+ InstantTestModelObserver observer(
+ instant()->model(), chrome::search::Mode::MODE_SEARCH_SUGGESTIONS);
+ SetOmniboxText(text);
+ observer.WaitUntilDesiredPreviewState();
+ }
+
+ std::wstring WrapScript(const std::string& script) const {
+ return UTF8ToWide("domAutomationController.send(" + script + ")");
+ }
+
+ bool GetBoolFromJS(content::RenderViewHost* rvh,
+ const std::string& script,
+ bool* result) WARN_UNUSED_RESULT {
+ return content::ExecuteJavaScriptAndExtractBool(rvh, std::wstring(),
+ WrapScript(script), result);
+ }
+
+ bool GetIntFromJS(content::RenderViewHost* rvh,
+ const std::string& script,
+ int* result) WARN_UNUSED_RESULT {
+ return content::ExecuteJavaScriptAndExtractInt(rvh, std::wstring(),
+ WrapScript(script), result);
+ }
+
+ bool GetStringFromJS(content::RenderViewHost* rvh,
+ const std::string& script,
+ std::string* result) WARN_UNUSED_RESULT {
+ return content::ExecuteJavaScriptAndExtractString(
+ rvh, std::wstring(), WrapScript(script), result);
+ }
+
+ bool ExecuteScript(const std::string& script) WARN_UNUSED_RESULT {
+ return content::ExecuteJavaScript(
+ instant()->GetPreviewContents()->GetRenderViewHost(), std::wstring(),
+ UTF8ToWide(script));
+ }
+
+ bool CheckVisibilityIs(content::WebContents* contents,
+ bool expected) WARN_UNUSED_RESULT {
+ bool actual = !expected; // Purposely start with a mis-match.
+ // We can only use ASSERT_*() in a method that returns void, hence this
+ // convoluted check.
+ return GetBoolFromJS(contents->GetRenderViewHost(),
+ "!document.webkitHidden", &actual) &&
+ actual == expected;
+ }
+
+ GURL instant_url_;
+};
+
+#endif // CHROME_BROWSER_INSTANT_TEST_UTILS_H_

Powered by Google App Engine
This is Rietveld 408576698