settings_browsertest.cc revision ddb351dbec246cf1fab5ec20d2d5520909041de1
172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/options/core_options_handler.h" 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/common/url_constants.h" 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/test/ui_test_utils.h" 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/webui/web_ui_browsertest.h" 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "googleurl/src/gurl.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenusing ::testing::StrictMock; 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenusing ::testing::_; 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenMATCHER_P(Eq_ListValue, inList, "") { 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return arg->Equals(inList); 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass MockCoreOptionsHandler : public CoreOptionsHandler { 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleInitialize, 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleFetchPrefs, 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleObservePrefs, 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleSetBooleanPref, 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleSetIntegerPref, 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleSetDoublePref, 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleSetStringPref, 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleSetObjectPref, 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleClearPref, 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_METHOD1(HandleUserMetricsAction, 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(const ListValue* args)); 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void RegisterMessages() { 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("coreOptionsInitialize", 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleInitialize)); 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("fetchPrefs", 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleFetchPrefs)); 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("observePrefs", 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleObservePrefs)); 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("setBooleanPref", 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleSetBooleanPref)); 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("setIntegerPref", 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleSetIntegerPref)); 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("setDoublePref", 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleSetDoublePref)); 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("setStringPref", 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleSetStringPref)); 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("setObjectPref", 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleSetObjectPref)); 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("clearPref", 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleClearPref)); 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen web_ui_->RegisterMessageCallback("coreOptionsUserMetricsAction", 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewCallback(this, &MockCoreOptionsHandler ::HandleUserMetricsAction)); 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass SettingsWebUITest : public WebUIBrowserTest { 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen protected: 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetUpInProcessBrowserTestFixture() { 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WebUIBrowserTest::SetUpInProcessBrowserTestFixture(); 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddLibrary(FILE_PATH_LITERAL("settings.js")); 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetUpOnMainThread() { 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_core_options_handler_.reset(new StrictMock<MockCoreOptionsHandler>()); 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CleanUpOnMainThread() { 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_core_options_handler_.reset(); 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual WebUIMessageHandler* GetMockMessageHandler() { 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return mock_core_options_handler_.get(); 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<StrictMock<MockCoreOptionsHandler> > mock_core_options_handler_; 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Test the end to end js to WebUI handler code path for 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// the message setBooleanPref. 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TODO(dtseng): add more EXPECT_CALL's when updating js test. 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Crashes on Mac only. See http://crbug.com/79181 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_MACOSX) 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define MAYBE_TestSetBooleanPrefTriggers DISABLED_TestSetBooleanPrefTriggers 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#else 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define MAYBE_TestSetBooleanPrefTriggers TestSetBooleanPrefTriggers 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(SettingsWebUITest, MAYBE_TestSetBooleanPrefTriggers) { 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // This serves as an example of a very constrained test. 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ListValue true_list_value; 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen true_list_value.Append(Value::CreateStringValue("browser.show_home_button")); 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen true_list_value.Append(Value::CreateBooleanValue(true)); 10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen true_list_value.Append( 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Value::CreateStringValue("Options_Homepage_HomeButton")); 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUISettingsURL)); 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*mock_core_options_handler_, 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen HandleSetBooleanPref(Eq_ListValue(&true_list_value))); 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(RunJavascriptTest("testSetBooleanPrefTriggers")); 11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 111