1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <map> 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/win/registry.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_function.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_function_dispatcher.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_apitest.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_rlz_module.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_switches.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "rlz/win/lib/rlz_lib.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockRlzSendFinancialPingFunction : public RlzSendFinancialPingFunction { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool RunImpl(); 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static int expected_count_; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static int expected_count() { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return expected_count_; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint MockRlzSendFinancialPingFunction::expected_count_ = 0; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool MockRlzSendFinancialPingFunction::RunImpl() { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(RlzSendFinancialPingFunction::RunImpl()); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++expected_count_; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochExtensionFunction* MockRlzSendFinancialPingFunctionFactory() { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new MockRlzSendFinancialPingFunction(); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(ExtensionApiTest, Rlz) { 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CommandLine::ForCurrentProcess()->AppendSwitch( 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switches::kEnableExperimentalExtensionApis); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Before running the tests, clear the state of the RLZ products used. 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rlz_lib::AccessPoint access_points[] = { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rlz_lib::GD_WEB_SERVER, 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rlz_lib::GD_OUTLOOK, 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rlz_lib::NO_ACCESS_POINT, 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rlz_lib::ClearProductState(rlz_lib::PINYIN_IME, access_points); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rlz_lib::ClearProductState(rlz_lib::DESKTOP, access_points); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Check that the state has really been cleared. 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick base::win::RegKey key(HKEY_CURRENT_USER, 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick L"Software\\Google\\Common\\Rlz\\Events\\N", 55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick KEY_READ); 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_FALSE(key.Valid()); 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick key.Open(HKEY_CURRENT_USER, L"Software\\Google\\Common\\Rlz\\Events\\D", 593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick KEY_READ); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_FALSE(key.Valid()); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Mock out experimental.rlz.sendFinancialPing(). 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(ExtensionFunctionDispatcher::OverrideFunction( 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "experimental.rlz.sendFinancialPing", 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockRlzSendFinancialPingFunctionFactory)); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set the access point that the test code is expecting. 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::GD_DESKBAND, "rlz_apitest")); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now run all the tests. 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(RunExtensionTest("rlz")) << message_; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_EQ(3, MockRlzSendFinancialPingFunction::expected_count()); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionFunctionDispatcher::ResetFunctions(); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now make sure we recorded what was expected. If the code in test.js 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // changes, need to make appropriate changes here. 783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick key.Open(HKEY_CURRENT_USER, L"Software\\Google\\Common\\Rlz\\Events\\N", 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick KEY_READ); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(key.Valid()); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DWORD value; 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(ERROR_SUCCESS, key.ReadValueDW(L"D3I", &value)); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, value); 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(ERROR_SUCCESS, key.ReadValueDW(L"D3S", &value)); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, value); 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(ERROR_SUCCESS, key.ReadValueDW(L"D3F", &value)); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, value); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(ERROR_SUCCESS, key.ReadValueDW(L"D4I", &value)); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, value); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick key.Open(HKEY_CURRENT_USER, L"Software\\Google\\Common\\Rlz\\Events\\D", 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick KEY_READ); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_FALSE(key.Valid()); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Cleanup. 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch rlz_lib::ClearProductState(rlz_lib::PINYIN_IME, access_points); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 100