11e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block// Copyright (c) 2012 The Chromium Authors. All rights reserved. 280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// found in the LICENSE file. 480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include <algorithm> 680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include <string> 780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include <vector> 880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/bind.h" 1080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/bind_helpers.h" 1180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/callback.h" 1280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/command_line.h" 1380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/file_util.h" 1480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/files/file_enumerator.h" 1580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/files/file_path.h" 1680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/files/scoped_temp_dir.h" 1780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/memory/ref_counted.h" 1880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/path_service.h" 1980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/prefs/pref_service.h" 2080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/run_loop.h" 2180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/strings/string16.h" 2280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/strings/string_util.h" 2380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/strings/stringprintf.h" 2480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/strings/utf_string_conversions.h" 2580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/test/test_file_util.h" 2680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/time/time.h" 2780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "base/values.h" 2880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/app/chrome_command_ids.h" 2980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/autocomplete/autocomplete_controller.h" 3080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/browser_process.h" 3180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/chrome_notification_types.h" 3280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/content_settings/tab_specific_content_settings.h" 33257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#include "chrome/browser/devtools/devtools_window.h" 3444f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "chrome/browser/download/download_prefs.h" 35257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#include "chrome/browser/extensions/crx_installer.h" 3680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/extensions/extension_service.h" 3780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/extensions/extension_system.h" 3880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/extensions/unpacked_installer.h" 3980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/extensions/updater/extension_updater.h" 4080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/infobars/infobar_service.h" 4180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/media/media_capture_devices_dispatcher.h" 421e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/media/media_stream_devices_controller.h" 431e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/metrics/variations/variations_service.h" 441e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/net/url_request_mock_util.h" 45257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#include "chrome/browser/plugins/plugin_prefs.h" 463fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch#include "chrome/browser/policy/browser_policy_connector.h" 471e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/policy/cloud/test_request_interceptor.h" 481e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/policy/external_data_fetcher.h" 491e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/policy/mock_configuration_policy_provider.h" 501e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/policy/policy_map.h" 5144f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "chrome/browser/prefs/session_startup_pref.h" 5244f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "chrome/browser/profiles/profile.h" 53257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#include "chrome/browser/search/instant_service.h" 541e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/search/instant_service_factory.h" 551e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/search/search.h" 561e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/search_engines/template_url.h" 571e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/search_engines/template_url_service.h" 581e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/search_engines/template_url_service_factory.h" 591e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/translate/translate_infobar_delegate.h" 601e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/translate/translate_tab_helper.h" 611e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/ui/bookmarks/bookmark_bar.h" 621e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/ui/browser.h" 631e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#include "chrome/browser/ui/browser_commands.h" 6480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/ui/browser_list.h" 6580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/ui/browser_tabstrip.h" 6680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/ui/browser_window.h" 6780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/ui/host_desktop.h" 6880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/ui/omnibox/location_bar.h" 6980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/ui/omnibox/omnibox_edit_model.h" 7080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/ui/omnibox/omnibox_view.h" 7180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/browser/ui/tabs/tab_strip_model.h" 7280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/common/chrome_paths.h" 7344f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "chrome/common/chrome_switches.h" 7444f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "chrome/common/content_settings.h" 7544f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "chrome/common/content_settings_pattern.h" 7644f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "chrome/common/extensions/extension.h" 7780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/common/extensions/extension_constants.h" 7880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/common/pref_names.h" 7980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/common/url_constants.h" 8080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/test/base/in_process_browser_test.h" 8144f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "chrome/test/base/test_switches.h" 8280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chrome/test/base/ui_test_utils.h" 8380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/browser_child_process_host_iterator.h" 8480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/browser_context.h" 8580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/browser_thread.h" 8644f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "content/public/browser/child_process_data.h" 8744f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "content/public/browser/download_item.h" 8880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/download_manager.h" 8980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/notification_registrar.h" 9080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/notification_service.h" 9144f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "content/public/browser/notification_source.h" 9280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/notification_types.h" 9380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/plugin_service.h" 9480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/browser/render_process_host.h" 95b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#include "content/public/browser/render_view_host.h" 9644f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "content/public/browser/web_contents.h" 9780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/common/content_constants.h" 9880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/common/content_paths.h" 9980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/common/page_transition_types.h" 10080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/common/process_type.h" 10180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/common/url_constants.h" 10280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/common/webplugininfo.h" 10380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/test/browser_test_utils.h" 10480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/test/download_test_observer.h" 10580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/test/mock_notification_observer.h" 10680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/test/test_navigation_observer.h" 10780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/public/test/test_utils.h" 10880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/test/net/url_request_failed_job.h" 10980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "content/test/net/url_request_mock_http_job.h" 11080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "grit/generated_resources.h" 11180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "net/base/net_errors.h" 11280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "net/base/net_util.h" 11344f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "net/base/url_util.h" 11480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "net/http/http_stream_factory.h" 1158a31eba00023874d4a1dcdc5f411cc4336776874Shimeng (Simon) Wang#include "net/url_request/url_request.h" 11680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "net/url_request/url_request_filter.h" 11780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "policy/policy_constants.h" 11880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 11980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 12080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "third_party/WebKit/public/web/WebInputEvent.h" 12180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "ui/base/l10n/l10n_util.h" 12280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "ui/base/resource/resource_bundle.h" 12380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "url/gurl.h" 12480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 12580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#if defined(OS_CHROMEOS) 12680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "ash/accelerators/accelerator_controller.h" 12780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "ash/accelerators/accelerator_table.h" 12880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "ash/magnifier/magnifier_constants.h" 12980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "ash/shell.h" 13044f0eee88ff00398ff7f715fab053374d808c90dSteve Block#include "ash/shell_delegate.h" 1313fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" 1323fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch#include "chrome/browser/chromeos/accessibility/magnification_manager.h" 13380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "chromeos/audio/cras_audio_handler.h" 13480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#endif 13580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 13680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenusing content::BrowserThread; 1379fac840a46e8b7e26894f4792ba26dde14c56b04Steve Blockusing content::URLRequestMockHTTPJob; 13880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenusing testing::AnyNumber; 1393fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochusing testing::Mock; 14080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenusing testing::Return; 14180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenusing testing::_; 1423fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 1433fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochnamespace policy { 14480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 14580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsennamespace { 14680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 14744f0eee88ff00398ff7f715fab053374d808c90dSteve Blockconst char kURL[] = "http://example.com"; 14880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst char kCookieValue[] = "converted=true"; 14980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// Assigned to Philip J. Fry to fix eventually. 15080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst char kCookieOptions[] = ";expires=Wed Jan 01 3000 00:00:00 GMT"; 15180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 15280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kTestExtensionsDir[] = 15380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen FILE_PATH_LITERAL("extensions"); 15480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kGoodCrxName[] = FILE_PATH_LITERAL("good.crx"); 15580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kAdBlockCrxName[] = 15680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen FILE_PATH_LITERAL("adblock.crx"); 15780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kHostedAppCrxName[] = 1583fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch FILE_PATH_LITERAL("hosted_app.crx"); 15980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 16080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst char kGoodCrxId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; 16180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst char kAdBlockCrxId[] = "dojnnbeimaimaojcialkkgajdnefpgcn"; 16280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst char kHostedAppCrxId[] = "kbmnembihfiondgfjekmnmcbddelicoi"; 16380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 16480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kGoodCrxManifestName[] = 16580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen FILE_PATH_LITERAL("good_update_manifest.xml"); 16680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kGood2CrxManifestName[] = 16780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen FILE_PATH_LITERAL("good2_update_manifest.xml"); 16880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kGoodV1CrxManifestName[] = 16980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen FILE_PATH_LITERAL("good_v1_update_manifest.xml"); 17080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kGoodUnpackedExt[] = 17180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen FILE_PATH_LITERAL("good_unpacked"); 17280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenconst base::FilePath::CharType kAppUnpackedExt[] = 17380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen FILE_PATH_LITERAL("app"); 17480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 17580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// Filters requests to the hosts in |urls| and redirects them to the test data 17680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// dir through URLRequestMockHTTPJobs. 17780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenvoid RedirectHostsToTestData(const char* const urls[], size_t size) { 17880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // Map the given hosts to the test data dir. 17980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance(); 18080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::FilePath base_path; 18180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen PathService::Get(chrome::DIR_TEST_DATA, &base_path); 18280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen for (size_t i = 0; i < size; ++i) { 18344f0eee88ff00398ff7f715fab053374d808c90dSteve Block const GURL url(urls[i]); 18444f0eee88ff00398ff7f715fab053374d808c90dSteve Block EXPECT_TRUE(url.is_valid()); 18580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen filter->AddUrlProtocolHandler(url, 18680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen URLRequestMockHTTPJob::CreateProtocolHandler(base_path)); 18780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 18880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 18980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 19080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// Remove filters for requests to the hosts in |urls|. 19180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenvoid UndoRedirectHostsToTestData(const char* const urls[], size_t size) { 19244f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Map the given hosts to the test data dir. 19380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance(); 19480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen for (size_t i = 0; i < size; ++i) { 19580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen const GURL url(urls[i]); 19644f0eee88ff00398ff7f715fab053374d808c90dSteve Block EXPECT_TRUE(url.is_valid()); 19780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen filter->RemoveUrlHandler(url); 19880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 19980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 20080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 20180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// Fails requests using ERR_CONNECTION_RESET. 20280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsennet::URLRequestJob* FailedJobFactory( 20380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen net::URLRequest* request, 20480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen net::NetworkDelegate* network_delegate, 20580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen const std::string& scheme) { 20680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen return new content::URLRequestFailedJob( 20780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen request, network_delegate, net::ERR_CONNECTION_RESET); 20880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 20980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 21080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// While |MakeRequestFail| is in scope URLRequests to |host| will fail. 21180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenclass MakeRequestFail { 21280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen public: 21380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // Sets up the filter on IO thread such that requests to |host| fail. 21480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen explicit MakeRequestFail(const std::string& host) : host_(host) { 21580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen BrowserThread::PostTaskAndReply( 21680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen BrowserThread::IO, FROM_HERE, 21780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Bind(MakeRequestFailOnIO, host_), 21880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::MessageLoop::QuitClosure()); 21980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::RunMessageLoop(); 22080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 22180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ~MakeRequestFail() { 22280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen BrowserThread::PostTaskAndReply( 22380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen BrowserThread::IO, FROM_HERE, 22480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Bind(UndoMakeRequestFailOnIO, host_), 22580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::MessageLoop::QuitClosure()); 22680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::RunMessageLoop(); 22780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 22880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 22980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen private: 23080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // Filters requests to the |host| such that they fail. Run on IO thread. 23180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen static void MakeRequestFailOnIO(const std::string& host) { 23280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance(); 23380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen filter->AddHostnameHandler("http", host, &FailedJobFactory); 23480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen filter->AddHostnameHandler("https", host, &FailedJobFactory); 23580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 23680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 23780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // Remove filters for requests to the |host|. Run on IO thread. 23880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen static void UndoMakeRequestFailOnIO(const std::string& host) { 23969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance(); 24069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch filter->RemoveHostnameHandler("http", host); 24180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen filter->RemoveHostnameHandler("https", host); 24269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } 243257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 24469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch const std::string host_; 2453fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch}; 2463fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 24769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// Verifies that the given url |spec| can be opened. This assumes that |spec| 24869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// points at empty.html in the test data dir. 24969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid CheckCanOpenURL(Browser* browser, const char* spec) { 250257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch GURL url(spec); 251257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::NavigateToURL(browser, url); 25269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::WebContents* contents = 253257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser->tab_strip_model()->GetActiveWebContents(); 254257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(url, contents->GetURL()); 25569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch string16 title = UTF8ToUTF16(url.spec() + " was blocked"); 25669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_NE(title, contents->GetTitle()); 25780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 2583fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 25969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// Verifies that access to the given url |spec| is blocked. 26080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenvoid CheckURLIsBlocked(Browser* browser, const char* spec) { 26169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch GURL url(spec); 26269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ui_test_utils::NavigateToURL(browser, url); 26369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::WebContents* contents = 26469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch browser->tab_strip_model()->GetActiveWebContents(); 26569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_EQ(url, contents->GetURL()); 26669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch string16 title = UTF8ToUTF16(url.spec() + " was blocked"); 26769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_EQ(title, contents->GetTitle()); 26869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 26969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // Verify that the expected error page is being displayed. 27069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch bool result = false; 27169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 27269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch contents, 27369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "var textContent = document.body.textContent;" 27469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "var hasError = textContent.indexOf('ERR_BLOCKED_BY_ADMINISTRATOR') >= 0;" 27580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen "domAutomationController.send(hasError);", 27669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch &result)); 27769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_TRUE(result); 27869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 27969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 28069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// Downloads a file named |file| and expects it to be saved to |dir|, which 28169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// must be empty. 28269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid DownloadAndVerifyFile( 28369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch Browser* browser, const base::FilePath& dir, const base::FilePath& file) { 28469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::DownloadManager* download_manager = 28569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::BrowserContext::GetDownloadManager(browser->profile()); 28669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::DownloadTestObserverTerminal observer( 28769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch download_manager, 1, 28869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 28969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 29080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::FilePath downloaded = dir.Append(file); 29169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_FALSE(base::PathExists(downloaded)); 29269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ui_test_utils::NavigateToURLWithDisposition( 29369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch browser, url, CURRENT_TAB, 29469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 29569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch observer.WaitForFinished(); 29669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_EQ( 29769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 1u, observer.NumDownloadsSeenInState(content::DownloadItem::COMPLETE)); 29869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_TRUE(base::PathExists(downloaded)); 29969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch base::FileEnumerator enumerator(dir, false, base::FileEnumerator::FILES); 30069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_EQ(file, enumerator.Next().BaseName()); 30169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_EQ(base::FilePath(), enumerator.Next()); 30269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 30380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 30469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch#if defined(OS_CHROMEOS) 30569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochint CountScreenshots() { 30669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext( 30769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ash::Shell::GetInstance()->delegate()->GetCurrentBrowserContext()); 30869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch base::FileEnumerator enumerator(download_prefs->DownloadPath(), 30969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch false, base::FileEnumerator::FILES, 31069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "Screenshot*"); 31169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch int count = 0; 31269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch while (!enumerator.Next().empty()) 31380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen count++; 31469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch return count; 31569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 31669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch#endif 31769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 31869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// Checks if WebGL is enabled in the given WebContents. 31969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochbool IsWebGLEnabled(content::WebContents* contents) { 32069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch bool result = false; 32169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 32269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch contents, 32369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "var canvas = document.createElement('canvas');" 32469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "var context = canvas.getContext('experimental-webgl');" 32569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "domAutomationController.send(context != null);", 32669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch &result)); 32769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch return result; 32869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 32969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 33069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochbool IsJavascriptEnabled(content::WebContents* contents) { 33169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch scoped_ptr<base::Value> value = content::ExecuteScriptAndGetValue( 33269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch contents->GetRenderViewHost(), "123"); 33369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch int result = 0; 33469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch if (!value->GetAsInteger(&result)) 33569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_EQ(base::Value::TYPE_NULL, value->GetType()); 33669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch return result == 123; 33769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 33869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 33969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid CopyPluginListAndQuit(std::vector<content::WebPluginInfo>* out, 34069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch const std::vector<content::WebPluginInfo>& in) { 34169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch *out = in; 34269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch base::MessageLoop::current()->QuitWhenIdle(); 34369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 34469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 34569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochtemplate<typename T> 34669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid CopyValueAndQuit(T* out, T in) { 34769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch *out = in; 34869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch base::MessageLoop::current()->QuitWhenIdle(); 34969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 35069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 35169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid GetPluginList(std::vector<content::WebPluginInfo>* plugins) { 35269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::PluginService* service = content::PluginService::GetInstance(); 35369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch service->GetPlugins(base::Bind(CopyPluginListAndQuit, plugins)); 35469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::RunMessageLoop(); 35569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 35669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 35769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochconst content::WebPluginInfo* GetFlashPlugin( 35869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch const std::vector<content::WebPluginInfo>& plugins) { 35969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch const content::WebPluginInfo* flash = NULL; 36069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch for (size_t i = 0; i < plugins.size(); ++i) { 36169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch if (plugins[i].name == ASCIIToUTF16(content::kFlashPluginName)) { 36269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch flash = &plugins[i]; 36369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch break; 36469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } 36569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } 36669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch#if defined(OFFICIAL_BUILD) 36769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // Official builds bundle Flash. 36869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch EXPECT_TRUE(flash); 36969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch#else 37069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch if (!flash) 37169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch LOG(INFO) << "Test skipped because the Flash plugin couldn't be found."; 37269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch#endif 37369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch return flash; 37480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 37580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 37680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenbool SetPluginEnabled(PluginPrefs* plugin_prefs, 3778b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch const content::WebPluginInfo* plugin, 3788b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch bool enabled) { 3798b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch bool ok = false; 3808b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch plugin_prefs->EnablePlugin(enabled, plugin->path, 3818b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch base::Bind(CopyValueAndQuit<bool>, &ok)); 3828b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch content::RunMessageLoop(); 38380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen return ok; 3848b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch} 3858b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 3868b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochint CountPluginsOnIOThread() { 3878b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch int count = 0; 3888b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch for (content::BrowserChildProcessHostIterator iter; !iter.Done(); ++iter) { 38980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen if (iter.GetData().process_type == content::PROCESS_TYPE_PLUGIN || 3908b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch iter.GetData().process_type == content::PROCESS_TYPE_PPAPI_PLUGIN) { 3918b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch count++; 3928b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch } 3938b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch } 3948b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch return count; 3958b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch} 3968b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 39780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenint CountPlugins() { 3988b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch int count = -1; 3998b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch BrowserThread::PostTaskAndReplyWithResult( 4008b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch BrowserThread::IO, FROM_HERE, 401b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Bind(CountPluginsOnIOThread), 4028b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch base::Bind(CopyValueAndQuit<int>, &count)); 4038b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch content::RunMessageLoop(); 4048b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch EXPECT_GE(count, 0); 4058b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch return count; 4068b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch} 4078b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 408b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochvoid FlushBlacklistPolicy() { 4098b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch // Updates of the URLBlacklist are done on IO, after building the blacklist 4108b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch // on FILE, which is initiated from IO. 4118b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch content::RunAllPendingInMessageLoop(BrowserThread::IO); 4128b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch content::RunAllPendingInMessageLoop(BrowserThread::FILE); 413b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::RunAllPendingInMessageLoop(BrowserThread::IO); 4148b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch} 4158b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 4168b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochbool ContainsVisibleElement(content::WebContents* contents, 4178b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch const std::string& id) { 4188b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch bool result; 419b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 4208b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch contents, 4218b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch "var elem = document.getElementById('" + id + "');" 4228b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch "domAutomationController.send(!!elem && !elem.hidden);", 4238b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch &result)); 4248b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch return result; 4258b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch} 4268b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 427b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#if defined(OS_CHROMEOS) 4288b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdochclass TestAudioObserver : public chromeos::CrasAudioHandler::AudioObserver { 4298b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch public: 4308b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch TestAudioObserver() : output_mute_changed_count_(0) { 4318b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch } 432b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 4338b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch int output_mute_changed_count() const { 4348b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch return output_mute_changed_count_; 4358b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch } 4368b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 4378b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch virtual ~TestAudioObserver() {} 438b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 4398b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch protected: 4408b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch // chromeos::CrasAudioHandler::AudioObserver overrides. 4418b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch virtual void OnOutputMuteChanged() OVERRIDE { 442b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ++output_mute_changed_count_; 443257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 444257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 445257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch private: 446257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch int output_mute_changed_count_; 447257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 448257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TestAudioObserver); 449257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 450257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#endif 451257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 452257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} // namespace 453257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 454257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass PolicyTest : public InProcessBrowserTest { 455257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch protected: 456257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyTest() {} 457257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual ~PolicyTest() {} 458257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 459257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 460257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch CommandLine::ForCurrentProcess()->AppendSwitch("noerrdialogs"); 461257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_CALL(provider_, IsInitializationComplete(_)) 462257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch .WillRepeatedly(Return(true)); 463257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber()); 464257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); 465257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 466257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 467257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual void SetUpOnMainThread() OVERRIDE { 468257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch BrowserThread::PostTask( 469257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch BrowserThread::IO, FROM_HERE, 470257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Bind(chrome_browser_net::SetUrlRequestMocksEnabled, true)); 471257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 472257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 473257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Makes URLRequestMockHTTPJobs serve data from content::DIR_TEST_DATA 474257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // instead of chrome::DIR_TEST_DATA. 475257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch void ServeContentTestData() { 476257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::FilePath root_http; 477257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PathService::Get(content::DIR_TEST_DATA, &root_http); 478257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch BrowserThread::PostTaskAndReply( 479257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch BrowserThread::IO, FROM_HERE, 480257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Bind(URLRequestMockHTTPJob::AddUrlHandler, root_http), 481257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::MessageLoop::current()->QuitWhenIdleClosure()); 482257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::RunMessageLoop(); 483257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 484257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 485257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch void SetScreenshotPolicy(bool enabled) { 486257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 487257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDisableScreenshots, 488257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 489257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Value::CreateBooleanValue(!enabled), NULL); 490257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 491257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 492257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 493257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch void TestScreenshotFeedback(bool enabled) { 494257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch SetScreenshotPolicy(enabled); 495257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 49669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // Wait for feedback page to load. 497257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WindowedNotificationObserver observer( 498257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::NOTIFICATION_LOAD_STOP, 49969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch content::NotificationService::AllSources()); 500257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_FEEDBACK)); 501257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch observer.Wait(); 502257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WebContents* web_contents = 503257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static_cast<content::Source<content::NavigationController> >( 504257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch observer.source())->GetWebContents(); 505257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 506257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Wait for feedback page to fully initialize. 507257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // setupCurrentScreenshot is called when feedback page loads and (among 508257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // other things) adds current-screenshots-thumbnailDiv-0-image element. 509257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // The code below executes either before setupCurrentScreenshot was called 510257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // (setupCurrentScreenshot is replaced with our hook) or after it has 511257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // completed (in that case send result immediately). 512257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch bool result = false; 513257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 514257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch web_contents, 515257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "function btest_initCompleted(url) {" 516257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " var img = new Image();" 517257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " img.src = url;" 518257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " img.onload = function() {" 519257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " domAutomationController.send(img.width * img.height > 0);" 520257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " };" 521257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " img.onerror = function() {" 522257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " domAutomationController.send(false);" 523257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " };" 524257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "}" 525257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "function setupCurrentScreenshot(url) {" 526257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " btest_initCompleted(url);" 527257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "}" 52869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "var img = document.getElementById(" 529257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " 'current-screenshots-thumbnailDiv-0-image');" 53069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch "if (img)" 531257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch " btest_initCompleted(img.src);", 532257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch &result)); 533257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(enabled, result); 534257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 535257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Feedback page is a singleton page, so close so future calls to this 536257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // function work as expected. 537257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch web_contents->Close(); 538257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 539257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 540257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#if defined(OS_CHROMEOS) 541257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch void TestScreenshotFile(bool enabled) { 542257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch SetScreenshotPolicy(enabled); 54369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ash::Shell::GetInstance()->accelerator_controller()->PerformAction( 544257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ash::TAKE_SCREENSHOT, ui::Accelerator()); 545257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 546257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // TAKE_SCREENSHOT handler posts write file task on success, wait for it. 547257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch BrowserThread::PostTaskAndReply( 548257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch BrowserThread::IO, 549257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch FROM_HERE, 550257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Bind(base::DoNothing), 551257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::MessageLoop::QuitClosure()); 552257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::RunMessageLoop(); 553257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 554257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#endif 555257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 556257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ExtensionService* extension_service() { 557257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch extensions::ExtensionSystem* system = 558257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch extensions::ExtensionSystem::Get(browser()->profile()); 559257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch return system->extension_service(); 560257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 561257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 562257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const extensions::Extension* InstallExtension( 563257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const base::FilePath::StringType& name) { 564257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::FilePath extension_path(ui_test_utils::GetTestFilePath( 565257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::FilePath(kTestExtensionsDir), base::FilePath(name))); 566257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch scoped_refptr<extensions::CrxInstaller> installer = 567257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch extensions::CrxInstaller::CreateSilent(extension_service()); 568257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch installer->set_allow_silent_install(true); 569257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE); 570257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch installer->set_creation_flags(extensions::Extension::FROM_WEBSTORE); 571257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 572257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WindowedNotificationObserver observer( 573257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch chrome::NOTIFICATION_CRX_INSTALLER_DONE, 574257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::NotificationService::AllSources()); 575257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch installer->InstallCrx(extension_path); 576257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch observer.Wait(); 577257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::Details<const extensions::Extension> details = observer.details(); 578257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch return details.ptr(); 579257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 580257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 581257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch void LoadUnpackedExtension( 582257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const base::FilePath::StringType& name, bool expect_success) { 583257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::FilePath extension_path(ui_test_utils::GetTestFilePath( 584257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::FilePath(kTestExtensionsDir), base::FilePath(name))); 585257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch scoped_refptr<extensions::UnpackedInstaller> installer = 5863fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch extensions::UnpackedInstaller::Create(extension_service()); 587257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WindowedNotificationObserver observer( 588257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch expect_success ? chrome::NOTIFICATION_EXTENSION_LOADED 589257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch : chrome::NOTIFICATION_EXTENSION_LOAD_ERROR, 590257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::NotificationService::AllSources()); 591257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch installer->Load(extension_path); 592257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch observer.Wait(); 5933fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 5943fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 5953fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch void UninstallExtension(const std::string& id, bool expect_success) { 5963fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch content::WindowedNotificationObserver observer( 597257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch expect_success ? chrome::NOTIFICATION_EXTENSION_UNINSTALLED 598257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch : chrome::NOTIFICATION_EXTENSION_UNINSTALL_NOT_ALLOWED, 599257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::NotificationService::AllSources()); 600257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch extension_service()->UninstallExtension(id, false, NULL); 601257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch observer.Wait(); 602257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 603257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 604257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch void UpdateProviderPolicy(const PolicyMap& policy) { 605257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch provider_.UpdateChromePolicy(policy); 606257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch DCHECK(base::MessageLoop::current()); 607257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::RunLoop loop; 608257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch loop.RunUntilIdle(); 609257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 610257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 611257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Sends a mouse click at the given coordinates to the current renderer. 612257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch void PerformClick(int x, int y) { 613257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WebContents* contents = 614257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 615257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch WebKit::WebMouseEvent click_event; 616257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch click_event.type = WebKit::WebInputEvent::MouseDown; 617257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch click_event.button = WebKit::WebMouseEvent::ButtonLeft; 618257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch click_event.clickCount = 1; 619257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch click_event.x = x; 620257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch click_event.y = y; 6213fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch contents->GetRenderViewHost()->ForwardMouseEvent(click_event); 6223fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch click_event.type = WebKit::WebInputEvent::MouseUp; 623257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch contents->GetRenderViewHost()->ForwardMouseEvent(click_event); 6243fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 625257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 626257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch MockConfigurationPolicyProvider provider_; 627257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 628257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 629257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#if defined(OS_WIN) 630257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch// This policy only exists on Windows. 631257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 6323fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch// Sets the locale policy before the browser is started. 633257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochclass LocalePolicyTest : public PolicyTest { 634257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch public: 635257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LocalePolicyTest() {} 636257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual ~LocalePolicyTest() {} 637257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 638257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 639257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyTest::SetUpInProcessBrowserTestFixture(); 640257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 641257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set( 642257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch key::kApplicationLocaleValue, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 643257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Value::CreateStringValue("fr"), NULL); 644257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch provider_.UpdateChromePolicy(policies); 645257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // The "en-US" ResourceBundle is always loaded before this step for tests, 646257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // but in this test we want the browser to load the bundle as it 647257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // normally would. 648257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ResourceBundle::CleanupSharedInstance(); 649257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 650257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 651257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 652257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(LocalePolicyTest, ApplicationLocaleValue) { 653257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that the default locale can be overridden with policy. 654257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ("fr", g_browser_process->GetApplicationLocale()); 655257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); 656257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch string16 french_title = l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE); 657257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch string16 title; 658257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(ui_test_utils::GetCurrentTabTitle(browser(), &title)); 659257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(french_title, title); 660257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 661257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Make sure this is really French and differs from the English title. 662257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch std::string loaded = 663257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("en-US"); 664257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ("en-US", loaded); 665257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch string16 english_title = l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE); 666257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_NE(french_title, english_title); 667257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 668257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#endif 669257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 670257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, BookmarkBarEnabled) { 671257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 672257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 673257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 674257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch return; 675257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#endif 676257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 677257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that the bookmarks bar can be forced to always or never show up. 678257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 6793fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch // Test starts in about:blank. 680257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PrefService* prefs = browser()->profile()->GetPrefs(); 681257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(prefs->IsManagedPreference(prefs::kShowBookmarkBar)); 682257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(prefs->GetBoolean(prefs::kShowBookmarkBar)); 683257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state()); 684257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 685257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 686257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_MANDATORY, 687257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 688257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 689257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(prefs->IsManagedPreference(prefs::kShowBookmarkBar)); 690257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(prefs->GetBoolean(prefs::kShowBookmarkBar)); 691257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state()); 692257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 693257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // The NTP has special handling of the bookmark bar. 694257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); 695257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state()); 696257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 697257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_MANDATORY, 698257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 6993fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch UpdateProviderPolicy(policies); 700257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(prefs->IsManagedPreference(prefs::kShowBookmarkBar)); 701257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(prefs->GetBoolean(prefs::kShowBookmarkBar)); 702257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // The bookmark bar is hidden in the NTP when disabled by policy. 703257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state()); 704257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 705257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Clear(); 706257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 707257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(prefs->IsManagedPreference(prefs::kShowBookmarkBar)); 708257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(prefs->GetBoolean(prefs::kShowBookmarkBar)); 709257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // The bookmark bar is shown detached in the NTP, when disabled by prefs only. 710257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(BookmarkBar::DETACHED, browser()->bookmark_bar_state()); 711257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 712257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 713257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, PRE_PRE_DefaultCookiesSetting) { 714257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that cookies are deleted on shutdown. This test is split in 3 715257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // parts because it spans 2 browser restarts. 716257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 717257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch Profile* profile = browser()->profile(); 718257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch GURL url(kURL); 719257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // No cookies at startup. 720257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(content::GetCookies(profile, url).empty()); 721257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Set a cookie now. 722257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch std::string value = std::string(kCookieValue) + std::string(kCookieOptions); 723257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(content::SetCookie(profile, url, value)); 724257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verify it was set. 725257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kCookieValue, GetCookies(profile, url)); 726257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 727257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 728257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, PRE_DefaultCookiesSetting) { 729257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verify that the cookie persists across restarts. 730257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kCookieValue, GetCookies(browser()->profile(), GURL(kURL))); 731257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Now set the policy and the cookie should be gone after another restart. 732257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 733257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultCookiesSetting, POLICY_LEVEL_MANDATORY, 734257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateIntegerValue(4), NULL); 735257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 736257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 737257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 738257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DefaultCookiesSetting) { 739257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verify that the cookie is gone. 740257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(GetCookies(browser()->profile(), GURL(kURL)).empty()); 741257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 742257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 743257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DefaultSearchProvider) { 744257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch MakeRequestFail make_request_fail("search.example"); 745257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 746257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that a default search is made using the provider configured via 747257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // policy. Also checks that default search can be completely disabled. 748257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const string16 kKeyword(ASCIIToUTF16("testsearch")); 749257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const std::string kSearchURL("http://search.example/search?q={searchTerms}"); 750257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const std::string kAlternateURL0( 751257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "http://search.example/search#q={searchTerms}"); 752257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const std::string kAlternateURL1("http://search.example/#q={searchTerms}"); 753257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const std::string kSearchTermsReplacementKey("zekey"); 754257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const std::string kImageURL("http://test.com/searchbyimage/upload"); 755257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const std::string kImageURLPostParams( 756257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "image_content=content,image_url=http://test.com/test.png"); 757257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 758257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch TemplateURLService* service = TemplateURLServiceFactory::GetForProfile( 759257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->profile()); 760257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::WaitForTemplateURLServiceToLoad(service); 761257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch TemplateURL* default_search = service->GetDefaultSearchProvider(); 762257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT_TRUE(default_search); 763257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_NE(kKeyword, default_search->keyword()); 764257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_NE(kSearchURL, default_search->url()); 765257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE( 766257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch default_search->alternate_urls().size() == 2 && 767257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch default_search->alternate_urls()[0] == kAlternateURL0 && 76869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch default_search->alternate_urls()[1] == kAlternateURL1 && 769257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch default_search->search_terms_replacement_key() == 770257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch kSearchTermsReplacementKey && 771257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch default_search->image_url() == kImageURL && 772257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch default_search->image_url_post_params() == kImageURLPostParams); 773257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 774257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Override the default search provider using policies. 775257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 776257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultSearchProviderEnabled, POLICY_LEVEL_MANDATORY, 777257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 778257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultSearchProviderKeyword, 779257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 780257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Value::CreateStringValue(kKeyword), NULL); 781257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultSearchProviderSearchURL, 782257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 783257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Value::CreateStringValue(kSearchURL), NULL); 784257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::ListValue* alternate_urls = new base::ListValue(); 785257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch alternate_urls->AppendString(kAlternateURL0); 786257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch alternate_urls->AppendString(kAlternateURL1); 787257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultSearchProviderAlternateURLs, POLICY_LEVEL_MANDATORY, 788257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, alternate_urls, NULL); 789257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultSearchProviderSearchTermsReplacementKey, 790257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 791257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Value::CreateStringValue(kSearchTermsReplacementKey), 792257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch NULL); 793257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultSearchProviderImageURL, 794257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 795257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Value::CreateStringValue(kImageURL), 796257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch NULL); 797257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultSearchProviderImageURLPostParams, 798257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 799257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Value::CreateStringValue(kImageURLPostParams), 800257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch NULL); 801257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 802257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch default_search = service->GetDefaultSearchProvider(); 803257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT_TRUE(default_search); 804257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kKeyword, default_search->keyword()); 805257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kSearchURL, default_search->url()); 806257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(2U, default_search->alternate_urls().size()); 807257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kAlternateURL0, default_search->alternate_urls()[0]); 808257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kAlternateURL1, default_search->alternate_urls()[1]); 809257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kSearchTermsReplacementKey, 810257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch default_search->search_terms_replacement_key()); 811257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kImageURL, default_search->image_url()); 812257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kImageURLPostParams, default_search->image_url_post_params()); 813257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 814257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verify that searching from the omnibox uses kSearchURL. 815257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch chrome::FocusLocationBar(browser()); 816257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LocationBar* location_bar = browser()->window()->GetLocationBar(); 817257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, "stuff to search for"); 818257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch OmniboxEditModel* model = location_bar->GetLocationEntry()->model(); 819257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(model->CurrentMatch(NULL).destination_url.is_valid()); 820257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WebContents* web_contents = 821257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 822257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch GURL expected("http://search.example/search?q=stuff+to+search+for"); 823257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(expected, web_contents->GetURL()); 824257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 825257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verify that searching from the omnibox can be disabled. 826257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(content::kAboutBlankURL)); 827257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kDefaultSearchProviderEnabled, POLICY_LEVEL_MANDATORY, 828257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 829257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(service->GetDefaultSearchProvider()); 830257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 831257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(service->GetDefaultSearchProvider()); 832257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, "should not work"); 833257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // This means that submitting won't trigger any action. 834257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(model->CurrentMatch(NULL).destination_url.is_valid()); 835257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(GURL(content::kAboutBlankURL), web_contents->GetURL()); 836257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 837257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 838257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ForceSafeSearch) { 839257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Makes the requests fail since all we want to check is that the redirection 840257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // is done properly. 841257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch MakeRequestFail make_request_fail("google.com"); 842257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 843257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that requests to Google Search engine with the SafeSearch 844257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // enabled set the safe=active&ssui=on parameters at the end of the query. 845257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch TemplateURLService* service = TemplateURLServiceFactory::GetForProfile( 846257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->profile()); 847257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::WaitForTemplateURLServiceToLoad(service); 848257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 849257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // First check that nothing happens. 850257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::TestNavigationObserver no_safesearch_observer( 851257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents()); 852257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch chrome::FocusLocationBar(browser()); 853257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LocationBar* location_bar = browser()->window()->GetLocationBar(); 854257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, "http://google.com/"); 855257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch OmniboxEditModel* model = location_bar->GetLocationEntry()->model(); 856257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch no_safesearch_observer.Wait(); 857257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(model->CurrentMatch(NULL).destination_url.is_valid()); 858257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WebContents* web_contents = 859257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 860257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch GURL expected_without("http://google.com/"); 861257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(expected_without, web_contents->GetURL()); 862257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 863257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PrefService* prefs = browser()->profile()->GetPrefs(); 864257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(prefs->IsManagedPreference(prefs::kForceSafeSearch)); 865257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(prefs->GetBoolean(prefs::kForceSafeSearch)); 866257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 867257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Override the default SafeSearch setting using policies. 868257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 869257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kForceSafeSearch, POLICY_LEVEL_MANDATORY, 870257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 871257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 872257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 873257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(prefs->IsManagedPreference(prefs::kForceSafeSearch)); 874257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(prefs->GetBoolean(prefs::kForceSafeSearch)); 875257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 876257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::TestNavigationObserver safesearch_observer( 877257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents()); 878257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 879257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verify that searching from google.com works. 880257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch chrome::FocusLocationBar(browser()); 881257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch location_bar = browser()->window()->GetLocationBar(); 882257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, "http://google.com/"); 883257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch safesearch_observer.Wait(); 884257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch model = location_bar->GetLocationEntry()->model(); 885257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(model->CurrentMatch(NULL).destination_url.is_valid()); 886257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch web_contents = browser()->tab_strip_model()->GetActiveWebContents(); 887257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch std::string expected_url("http://google.com/?"); 888257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch expected_url += std::string(chrome::kSafeSearchSafeParameter) + "&" + 889257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch chrome::kSafeSearchSsuiParameter; 890257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch GURL expected_with_parameters(expected_url); 891257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(expected_with_parameters, web_contents->GetURL()); 892257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 893257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 894257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ReplaceSearchTerms) { 895257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch MakeRequestFail make_request_fail("search.example"); 896257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 897257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch chrome::EnableInstantExtendedAPIForTesting(); 898257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 899257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that a default search is made using the provider configured via 900257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // policy. Also checks that default search can be completely disabled. 901b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const string16 kKeyword(ASCIIToUTF16("testsearch")); 902b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const std::string kSearchURL("https://www.google.com/search?q={searchTerms}"); 903257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const std::string kInstantURL("http://does/not/exist"); 904b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const std::string kAlternateURL0( 905b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "https://www.google.com/search#q={searchTerms}"); 906b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const std::string kAlternateURL1("https://www.google.com/#q={searchTerms}"); 907b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const std::string kSearchTermsReplacementKey( 908b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "{google:instantExtendedEnabledKey}"); 909b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 910b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch TemplateURLService* service = TemplateURLServiceFactory::GetForProfile( 911b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->profile()); 912b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::WaitForTemplateURLServiceToLoad(service); 913b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch TemplateURL* default_search = service->GetDefaultSearchProvider(); 914b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(default_search); 915b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_NE(kKeyword, default_search->keyword()); 916b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_NE(kSearchURL, default_search->url()); 917b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_NE(kInstantURL, default_search->instant_url()); 918b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE( 919257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch default_search->alternate_urls().size() == 2 && 92044f0eee88ff00398ff7f715fab053374d808c90dSteve Block default_search->alternate_urls()[0] == kAlternateURL0 && 921b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch default_search->alternate_urls()[1] == kAlternateURL1); 922b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 923b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Override the default search provider using policies. 924b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 925b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDefaultSearchProviderEnabled, POLICY_LEVEL_MANDATORY, 926b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 927b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDefaultSearchProviderKeyword, 928257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 929b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateStringValue(kKeyword), NULL); 930b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDefaultSearchProviderSearchURL, 931b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 932b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateStringValue(kSearchURL), NULL); 933b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDefaultSearchProviderInstantURL, 934b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 935b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateStringValue(kInstantURL), NULL); 936b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue* alternate_urls = new base::ListValue(); 937b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch alternate_urls->AppendString(kAlternateURL0); 938b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch alternate_urls->AppendString(kAlternateURL1); 939b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDefaultSearchProviderAlternateURLs, POLICY_LEVEL_MANDATORY, 940b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, alternate_urls, NULL); 941b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDefaultSearchProviderSearchTermsReplacementKey, 942257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 94344f0eee88ff00398ff7f715fab053374d808c90dSteve Block base::Value::CreateStringValue(kSearchTermsReplacementKey), 944b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch NULL); 945b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 946b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch default_search = service->GetDefaultSearchProvider(); 947b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(default_search); 948b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(kKeyword, default_search->keyword()); 949257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(kSearchURL, default_search->url()); 950b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(kInstantURL, default_search->instant_url()); 951257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(2U, default_search->alternate_urls().size()); 952b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(kAlternateURL0, default_search->alternate_urls()[0]); 953b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(kAlternateURL1, default_search->alternate_urls()[1]); 954257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 955b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Query terms replacement requires that the renderer process be a recognized 956b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Instant renderer. Fake it. 957257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch InstantService* instant_service = 958b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch InstantServiceFactory::GetForProfile(browser()->profile()); 959b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch instant_service->AddInstantProcess(browser()->tab_strip_model()-> 960257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch GetActiveWebContents()->GetRenderProcessHost()->GetID()); 961b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 962b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that searching from the omnibox does search term replacement with 963257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // first URL pattern. 96444f0eee88ff00398ff7f715fab053374d808c90dSteve Block chrome::FocusLocationBar(browser()); 96544f0eee88ff00398ff7f715fab053374d808c90dSteve Block LocationBar* location_bar = browser()->window()->GetLocationBar(); 966257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, 967257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "https://www.google.com/?espv=1#q=foobar"); 968257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE( 969257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->toolbar_model()->WouldReplaceSearchURLWithSearchTerms(false)); 970b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(ASCIIToUTF16("foobar"), 971b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch location_bar->GetLocationEntry()->GetText()); 972257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 973b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that not using espv=1 does not do search term replacement. 974b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chrome::FocusLocationBar(browser()); 975b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch location_bar = browser()->window()->GetLocationBar(); 976b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, 977b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "https://www.google.com/?q=foobar"); 978b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE( 979b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->toolbar_model()->WouldReplaceSearchURLWithSearchTerms(false)); 980b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(ASCIIToUTF16("https://www.google.com/?q=foobar"), 9813fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch location_bar->GetLocationEntry()->GetText()); 982b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 983b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that searching from the omnibox does search term replacement with 984b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // second URL pattern. 985b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chrome::FocusLocationBar(browser()); 986b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, 987b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "https://www.google.com/search?espv=1#q=banana"); 988b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE( 989b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->toolbar_model()->WouldReplaceSearchURLWithSearchTerms(false)); 9903fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch EXPECT_EQ(ASCIIToUTF16("banana"), 9913fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch location_bar->GetLocationEntry()->GetText()); 9923fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 9933fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch // Verify that searching from the omnibox does search term replacement with 994b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // standard search URL pattern. 995b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chrome::FocusLocationBar(browser()); 996b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, 997257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "https://www.google.com/search?q=tractor+parts&espv=1"); 998257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE( 999b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->toolbar_model()->WouldReplaceSearchURLWithSearchTerms(false)); 1000b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(ASCIIToUTF16("tractor parts"), 1001b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch location_bar->GetLocationEntry()->GetText()); 1002b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1003b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that searching from the omnibox prioritizes hash over query. 1004b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chrome::FocusLocationBar(browser()); 1005b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::SendToOmniboxAndSubmit(location_bar, 1006b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "https://www.google.com/search?q=tractor+parts&espv=1#q=foobar"); 1007b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE( 1008b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->toolbar_model()->WouldReplaceSearchURLWithSearchTerms(false)); 1009b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(ASCIIToUTF16("foobar"), 1010b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch location_bar->GetLocationEntry()->GetText()); 1011b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1012b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1013b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// The linux and win bots can't create a GL context. http://crbug.com/103379 1014b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#if defined(OS_MACOSX) 1015b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, Disable3DAPIs) { 1016b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(content::kAboutBlankURL)); 1017b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // WebGL is enabled by default. 1018b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WebContents* contents = 1019b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 1020b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(IsWebGLEnabled(contents)); 1021b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Disable with a policy. 1022b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1023b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisable3DAPIs, POLICY_LEVEL_MANDATORY, 1024b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1025b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1026b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Crash and reload the tab to get a new renderer. 1027b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::CrashTab(contents); 1028b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_RELOAD)); 1029b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(IsWebGLEnabled(contents)); 1030b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Enable with a policy. 1031b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisable3DAPIs, POLICY_LEVEL_MANDATORY, 1032b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 1033b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1034b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::CrashTab(contents); 1035b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_RELOAD)); 1036b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(IsWebGLEnabled(contents)); 1037b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1038b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 1039b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1040b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DisableSpdy) { 1041b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that SPDY can be disable by policy. 1042b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(net::HttpStreamFactory::spdy_enabled()); 1043b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1044b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisableSpdy, POLICY_LEVEL_MANDATORY, 1045b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1046b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1047b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::RunAllPendingInMessageLoop(); 1048b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(net::HttpStreamFactory::spdy_enabled()); 1049b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that it can be force-enabled too. 1050b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->profile()->GetPrefs()->SetBoolean(prefs::kDisableSpdy, true); 1051b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisableSpdy, POLICY_LEVEL_MANDATORY, 1052b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 1053b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1054b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::RunAllPendingInMessageLoop(); 1055b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(net::HttpStreamFactory::spdy_enabled()); 1056b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 10573fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 1058b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DisabledPlugins) { 1059b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that plugins can be forced to be disabled by policy. 1060b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1061b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the Flash plugin exists and that it can be enabled and disabled 1062b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // by the user. 1063b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch std::vector<content::WebPluginInfo> plugins; 1064b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch GetPluginList(&plugins); 1065b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const content::WebPluginInfo* flash = GetFlashPlugin(plugins); 1066b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (!flash) 1067b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return; 1068b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PluginPrefs* plugin_prefs = 1069b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PluginPrefs::GetForProfile(browser()->profile()).get(); 1070b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1071b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(SetPluginEnabled(plugin_prefs, flash, false)); 1072b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(plugin_prefs->IsPluginEnabled(*flash)); 1073b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(SetPluginEnabled(plugin_prefs, flash, true)); 1074b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1075b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1076b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Now disable it with a policy. 1077b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue disabled_plugins; 1078b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch disabled_plugins.Append(base::Value::CreateStringValue("*Flash*")); 1079b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1080b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisabledPlugins, POLICY_LEVEL_MANDATORY, 1081b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, disabled_plugins.DeepCopy(), NULL); 1082b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1083b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(plugin_prefs->IsPluginEnabled(*flash)); 1084b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The user shouldn't be able to enable it. 1085b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(SetPluginEnabled(plugin_prefs, flash, true)); 1086257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(plugin_prefs->IsPluginEnabled(*flash)); 1087b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1088b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1089b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DisabledPluginsExceptions) { 1090b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that plugins with an exception in the blacklist can be enabled. 1091b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1092b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the Flash plugin exists and that it can be enabled and disabled 1093b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // by the user. 1094b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch std::vector<content::WebPluginInfo> plugins; 1095b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch GetPluginList(&plugins); 1096b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const content::WebPluginInfo* flash = GetFlashPlugin(plugins); 1097b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (!flash) 1098b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return; 1099b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PluginPrefs* plugin_prefs = 1100b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PluginPrefs::GetForProfile(browser()->profile()).get(); 1101b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1102b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1103b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Disable all plugins. 1104b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue disabled_plugins; 1105b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch disabled_plugins.Append(base::Value::CreateStringValue("*")); 1106b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1107b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisabledPlugins, POLICY_LEVEL_MANDATORY, 1108b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, disabled_plugins.DeepCopy(), NULL); 1109b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1110b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(plugin_prefs->IsPluginEnabled(*flash)); 1111b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The user shouldn't be able to enable it. 1112b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(SetPluginEnabled(plugin_prefs, flash, true)); 1113b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(plugin_prefs->IsPluginEnabled(*flash)); 1114b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1115b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Now open an exception for flash. 1116257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::ListValue disabled_plugins_exceptions; 1117b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch disabled_plugins_exceptions.Append( 1118b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateStringValue("*Flash*")); 1119b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisabledPluginsExceptions, POLICY_LEVEL_MANDATORY, 1120b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, disabled_plugins_exceptions.DeepCopy(), NULL); 1121b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1122b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // It should revert to the user's preference automatically. 1123b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1124b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // And the user should be able to disable and enable again. 1125257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(SetPluginEnabled(plugin_prefs, flash, false)); 1126b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(plugin_prefs->IsPluginEnabled(*flash)); 1127b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(SetPluginEnabled(plugin_prefs, flash, true)); 1128b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1129b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1130257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1131b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, EnabledPlugins) { 1132b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that a plugin can be force-installed with a policy. 1133b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch std::vector<content::WebPluginInfo> plugins; 1134b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch GetPluginList(&plugins); 1135b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const content::WebPluginInfo* flash = GetFlashPlugin(plugins); 1136b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (!flash) 1137b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return; 1138b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PluginPrefs* plugin_prefs = 1139b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PluginPrefs::GetForProfile(browser()->profile()).get(); 1140b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1141b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1142b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The user disables it and then a policy forces it to be enabled. 1143b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(SetPluginEnabled(plugin_prefs, flash, false)); 1144257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(plugin_prefs->IsPluginEnabled(*flash)); 1145b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue plugin_list; 1146b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch plugin_list.Append(base::Value::CreateStringValue(content::kFlashPluginName)); 1147b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1148b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kEnabledPlugins, POLICY_LEVEL_MANDATORY, 1149b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, plugin_list.DeepCopy(), NULL); 1150b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1151b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1152b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The user can't disable it anymore. 1153b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(SetPluginEnabled(plugin_prefs, flash, false)); 1154b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1155257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1156b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // When a plugin is both enabled and disabled, the whitelist takes precedence. 1157b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisabledPlugins, POLICY_LEVEL_MANDATORY, 1158b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, plugin_list.DeepCopy(), NULL); 1159b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1160b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(plugin_prefs->IsPluginEnabled(*flash)); 1161b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1162b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1163b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, AlwaysAuthorizePlugins) { 1164b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that dangerous plugins can be always authorized to run with 1165b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // a policy. 1166b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1167b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the test page exists. It is only present in checkouts with 1168b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // src-internal. 1169b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (!base::PathExists(ui_test_utils::GetTestFilePath( 1170b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath(FILE_PATH_LITERAL("plugin")), 1171b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath(FILE_PATH_LITERAL("quicktime.html"))))) { 1172b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch LOG(INFO) << 1173b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "Test skipped because plugin/quicktime.html test file wasn't found."; 1174b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return; 1175b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1176b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1177b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ServeContentTestData(); 1178b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // No plugins at startup. 1179257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(0, CountPlugins()); 1180b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1181b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WebContents* contents = 1182b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 1183b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(contents); 1184b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch InfoBarService* infobar_service = InfoBarService::FromWebContents(contents); 1185b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(infobar_service); 1186b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(0u, infobar_service->infobar_count()); 1187b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1188b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath path(FILE_PATH_LITERAL("plugin/quicktime.html")); 1189b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch GURL url(URLRequestMockHTTPJob::GetMockUrl(path)); 1190b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1191b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // This should have triggered the dangerous plugin infobar. 1192b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_EQ(1u, infobar_service->infobar_count()); 1193b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(infobar_service->infobar_at(0)->AsConfirmInfoBarDelegate()); 1194b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // And the plugin isn't running. 1195b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(0, CountPlugins()); 1196b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1197b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Now set a policy to always authorize this. 1198b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1199b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kAlwaysAuthorizePlugins, POLICY_LEVEL_MANDATORY, 1200b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1201b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1202b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Reloading the page shouldn't trigger the infobar this time. 1203b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1204b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(0u, infobar_service->infobar_count()); 1205b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // And the plugin started automatically. 1206b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(1, CountPlugins()); 1207b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1208b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1209b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DeveloperToolsDisabled) { 1210b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that access to the developer tools can be disabled. 1211b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1212b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Open devtools. 1213b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_DEV_TOOLS)); 1214b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WebContents* contents = 1215b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 1216b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(DevToolsWindow::GetDockedInstanceForInspectedTab(contents)); 1217b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1218b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Disable devtools via policy. 1219b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1220b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDeveloperToolsDisabled, POLICY_LEVEL_MANDATORY, 1221b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1222b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1223b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The existing devtools window should have closed. 1224b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(DevToolsWindow::GetDockedInstanceForInspectedTab(contents)); 1225b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // And it's not possible to open it again. 1226b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(chrome::ExecuteCommand(browser(), IDC_DEV_TOOLS)); 1227b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(DevToolsWindow::GetDockedInstanceForInspectedTab(contents)); 1228b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1229b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1230b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, WebStoreIconHidden) { 1231b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 1232b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 1233b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 1234b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return; 1235b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 1236b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1237b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that the web store icons can be hidden from the new tab page. 1238b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1239b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Open new tab page and look for the web store icons. 1240b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); 1241b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WebContents* contents = 1242b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 1243b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1244b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#if !defined(OS_CHROMEOS) 1245b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Look for web store's app ID in the apps page. 1246b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(ContainsVisibleElement(contents, 1247b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "ahfgeienlihckogmohjhadlkjgocpleb")); 1248b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 1249b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1250b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The next NTP has no footer. 1251b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (ContainsVisibleElement(contents, "footer")) 1252257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(ContainsVisibleElement(contents, "chrome-web-store-link")); 1253257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1254b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Turn off the web store icons. 1255b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1256b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kHideWebStoreIcon, POLICY_LEVEL_MANDATORY, 1257b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1258b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1259b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1260257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // The web store icons should now be hidden. 1261257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); 1262257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(ContainsVisibleElement(contents, 1263b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "ahfgeienlihckogmohjhadlkjgocpleb")); 1264257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(ContainsVisibleElement(contents, "chrome-web-store-link")); 1265257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 1266b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1267257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch// This policy isn't available on Chrome OS. 1268257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#if !defined(OS_CHROMEOS) 1269257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DownloadDirectory) { 1270257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that the download directory can be forced by policy. 1271257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1272257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Set the initial download directory. 1273257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::ScopedTempDir initial_dir; 1274257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT_TRUE(initial_dir.CreateUniqueTempDir()); 1275257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->profile()->GetPrefs()->SetFilePath( 1276257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch prefs::kDownloadDefaultDirectory, initial_dir.path()); 1277257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Don't prompt for the download location during this test. 1278b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->profile()->GetPrefs()->SetBoolean( 1279257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch prefs::kPromptForDownload, false); 1280257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1281b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that downloads end up on the default directory. 1282b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath file(FILE_PATH_LITERAL("download-test1.lib")); 1283b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch DownloadAndVerifyFile(browser(), initial_dir.path(), file); 1284b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch file_util::DieFileDie(initial_dir.path().Append(file), false); 1285b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1286b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Override the download directory with the policy and verify a download. 1287b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ScopedTempDir forced_dir; 1288b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(forced_dir.CreateUniqueTempDir()); 1289b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1290b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDownloadDirectory, POLICY_LEVEL_MANDATORY, 1291b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 1292b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateStringValue(forced_dir.path().value()), NULL); 1293b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1294b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch DownloadAndVerifyFile(browser(), forced_dir.path(), file); 1295b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the first download location wasn't affected. 1296b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(base::PathExists(initial_dir.path().Append(file))); 1297b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1298b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 1299b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1300b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallBlacklistSelective) { 1301b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that blacklisted extensions can't be installed. 1302b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ExtensionService* service = extension_service(); 1303b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_FALSE(service->GetExtensionById(kGoodCrxId, true)); 1304b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_FALSE(service->GetExtensionById(kAdBlockCrxId, true)); 1305b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue blacklist; 1306b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch blacklist.Append(base::Value::CreateStringValue(kGoodCrxId)); 1307b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1308b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kExtensionInstallBlacklist, POLICY_LEVEL_MANDATORY, 1309b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, blacklist.DeepCopy(), NULL); 1310b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1311b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1312b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // "good.crx" is blacklisted. 13138b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch EXPECT_FALSE(InstallExtension(kGoodCrxName)); 1314b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(service->GetExtensionById(kGoodCrxId, true)); 1315b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1316b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // "adblock.crx" is not. 1317b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const extensions::Extension* adblock = InstallExtension(kAdBlockCrxName); 1318b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(adblock); 1319b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(kAdBlockCrxId, adblock->id()); 1320b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(adblock, 1321b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch service->GetExtensionById(kAdBlockCrxId, true)); 1322b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1323b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1324b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallBlacklistWildcard) { 1325b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that a wildcard blacklist takes effect. 1326b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(InstallExtension(kAdBlockCrxName)); 1327b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ExtensionService* service = extension_service(); 1328b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_FALSE(service->GetExtensionById(kGoodCrxId, true)); 1329b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(service->GetExtensionById(kAdBlockCrxId, true)); 1330b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue blacklist; 1331b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch blacklist.Append(base::Value::CreateStringValue("*")); 1332b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1333b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kExtensionInstallBlacklist, POLICY_LEVEL_MANDATORY, 1334b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, blacklist.DeepCopy(), NULL); 1335b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1336b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1337b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // AdBlock was automatically removed. 1338b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_FALSE(service->GetExtensionById(kAdBlockCrxId, true)); 1339b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1340b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // And can't be installed again, nor can good.crx. 1341b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(InstallExtension(kAdBlockCrxName)); 1342b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(service->GetExtensionById(kAdBlockCrxId, true)); 1343b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(InstallExtension(kGoodCrxName)); 1344b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(service->GetExtensionById(kGoodCrxId, true)); 1345b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1346b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1347b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallWhitelist) { 1348b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that the whitelist can open exceptions to the blacklist. 1349b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ExtensionService* service = extension_service(); 1350b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_FALSE(service->GetExtensionById(kGoodCrxId, true)); 1351b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_FALSE(service->GetExtensionById(kAdBlockCrxId, true)); 1352b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue blacklist; 1353b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch blacklist.Append(base::Value::CreateStringValue("*")); 1354b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue whitelist; 1355b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch whitelist.Append(base::Value::CreateStringValue(kGoodCrxId)); 1356b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1357b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kExtensionInstallBlacklist, POLICY_LEVEL_MANDATORY, 1358b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, blacklist.DeepCopy(), NULL); 1359b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kExtensionInstallWhitelist, POLICY_LEVEL_MANDATORY, 1360b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, whitelist.DeepCopy(), NULL); 1361b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1362b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // "adblock.crx" is blacklisted. 1363b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(InstallExtension(kAdBlockCrxName)); 1364b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(service->GetExtensionById(kAdBlockCrxId, true)); 1365b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // "good.crx" has a whitelist exception. 1366b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const extensions::Extension* good = InstallExtension(kGoodCrxName); 1367b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(good); 1368b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(kGoodCrxId, good->id()); 1369b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(good, service->GetExtensionById(kGoodCrxId, true)); 1370b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The user can also remove this extension. 1371b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UninstallExtension(kGoodCrxId, true); 1372257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 1373b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1374b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallForcelist) { 1375b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that extensions that are force-installed by policies are 1376b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // installed and can't be uninstalled. 1377b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ExtensionService* service = extension_service(); 1378b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_FALSE(service->GetExtensionById(kGoodCrxId, true)); 1379b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1380b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Extensions that are force-installed come from an update URL, which defaults 1381b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // to the webstore. Use a mock URL for this test with an update manifest 1382b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // that includes "good_v1.crx". 1383b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath path = 1384b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath(kTestExtensionsDir).Append(kGoodV1CrxManifestName); 1385b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch GURL url(URLRequestMockHTTPJob::GetMockUrl(path)); 1386b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1387b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Setting the forcelist extension should install "good_v1.crx". 1388b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue forcelist; 1389b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch forcelist.Append(base::Value::CreateStringValue(base::StringPrintf( 1390b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "%s;%s", kGoodCrxId, url.spec().c_str()))); 1391b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1392b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kExtensionInstallForcelist, POLICY_LEVEL_MANDATORY, 1393b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, forcelist.DeepCopy(), NULL); 1394257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WindowedNotificationObserver observer( 1395257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch chrome::NOTIFICATION_EXTENSION_INSTALLED, 1396b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::NotificationService::AllSources()); 1397b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1398b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch observer.Wait(); 1399b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Note: Cannot check that the notification details match the expected 1400b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // exception, since the details object has already been freed prior to 1401b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // the completion of observer.Wait(). 1402b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1403b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(service->GetExtensionById(kGoodCrxId, true)); 1404b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1405b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The user is not allowed to uninstall force-installed extensions. 1406b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UninstallExtension(kGoodCrxId, false); 1407b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1408b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The user is not allowed to load an unpacked extension with the 1409b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // same ID as a force-installed extension. 1410b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch LoadUnpackedExtension(kGoodUnpackedExt, false); 1411b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1412b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Loading other unpacked extensions are not blocked. 1413b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch LoadUnpackedExtension(kAppUnpackedExt, true); 1414b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1415b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const std::string old_version_number = 1416b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch service->GetExtensionById(kGoodCrxId, true)->version()->GetString(); 1417b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1418b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath test_path; 1419b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_path)); 1420b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1421b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch TestRequestInterceptor interceptor("update.extension"); 1422b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch interceptor.PushJobCallback( 1423257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch TestRequestInterceptor::FileJob( 1424257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch test_path.Append(kTestExtensionsDir).Append(kGood2CrxManifestName))); 1425b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 14261e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // Updating the force-installed extension. 1427257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch extensions::ExtensionUpdater* updater = service->updater(); 14281e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block extensions::ExtensionUpdater::CheckParams params; 1429b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch params.install_immediately = true; 1430b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WindowedNotificationObserver update_observer( 1431b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chrome::NOTIFICATION_EXTENSION_INSTALLED, 1432b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::NotificationService::AllSources()); 1433257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch updater->CheckNow(params); 1434257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch update_observer.Wait(); 1435257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1436257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const base::Version* new_version = 1437257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch service->GetExtensionById(kGoodCrxId, true)->version(); 1438257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT_TRUE(new_version->IsValid()); 1439257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Version old_version(old_version_number); 1440257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT_TRUE(old_version.IsValid()); 1441257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1442257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(1, new_version->CompareTo(old_version)); 1443257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1444257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ(0u, interceptor.GetPendingSize()); 144569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 1446257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 144769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionAllowedTypes) { 1448257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that extensions are blocked if policy specifies an allowed types 1449257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // list and the extension's type is not on that list. 145069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ExtensionService* service = extension_service(); 1451257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT_FALSE(service->GetExtensionById(kGoodCrxId, true)); 145269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ASSERT_FALSE(service->GetExtensionById(kHostedAppCrxId, true)); 1453257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1454257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::ListValue allowed_types; 1455257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch allowed_types.AppendString("hosted_app"); 1456257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 1457257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set(key::kExtensionAllowedTypes, POLICY_LEVEL_MANDATORY, 1458257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, allowed_types.DeepCopy(), NULL); 1459257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 1460257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1461257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // "good.crx" is blocked. 1462257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(InstallExtension(kGoodCrxName)); 1463257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(service->GetExtensionById(kGoodCrxId, true)); 1464b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1465257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // "hosted_app.crx" is of a whitelisted type. 1466b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const extensions::Extension* hosted_app = InstallExtension(kHostedAppCrxName); 1467b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(hosted_app); 1468b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(kHostedAppCrxId, hosted_app->id()); 1469b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(hosted_app, service->GetExtensionById(kHostedAppCrxId, true)); 1470b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1471b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The user can remove the extension. 1472b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UninstallExtension(kHostedAppCrxId, true); 1473b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1474b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 14758b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// Checks that a click on an extension CRX download triggers the extension 1476b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// installation prompt without further user interaction when the source is 1477b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// whitelisted by policy. 1478b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionInstallSources) { 1479b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CommandLine::ForCurrentProcess()->AppendSwitchASCII( 1480b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch switches::kAppsGalleryInstallAutoConfirmForTests, "accept"); 1481b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1482b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const GURL install_source_url(URLRequestMockHTTPJob::GetMockUrl( 1483b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath(FILE_PATH_LITERAL("extensions/*")))); 1484b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const GURL referrer_url(URLRequestMockHTTPJob::GetMockUrl( 1485b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath(FILE_PATH_LITERAL("policy/*")))); 1486b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1487257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const GURL download_page_url(URLRequestMockHTTPJob::GetMockUrl(base::FilePath( 1488b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch FILE_PATH_LITERAL("policy/extension_install_sources_test.html")))); 1489b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), download_page_url); 1490b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1491b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // As long as the policy is not present, extensions are considered dangerous. 1492b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::DownloadTestObserverTerminal download_observer( 1493b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::BrowserContext::GetDownloadManager(browser()->profile()), 1, 1494b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY); 1495b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PerformClick(0, 0); 1496b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch download_observer.WaitForFinished(); 1497b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1498b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Install the policy and trigger another download. 1499b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue install_sources; 1500b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch install_sources.AppendString(install_source_url.spec()); 1501b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch install_sources.AppendString(referrer_url.spec()); 1502b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1503b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kExtensionInstallSources, POLICY_LEVEL_MANDATORY, 1504b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, install_sources.DeepCopy(), NULL); 1505b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1506b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1507b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WindowedNotificationObserver observer( 1508b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chrome::NOTIFICATION_EXTENSION_INSTALLED, 1509b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::NotificationService::AllSources()); 1510b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PerformClick(1, 0); 1511b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch observer.Wait(); 1512b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Note: Cannot check that the notification details match the expected 1513b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // exception, since the details object has already been freed prior to 1514b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // the completion of observer.Wait(). 1515b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1516b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The first extension shouldn't be present, the second should be there. 1517b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(extension_service()->GetExtensionById(kGoodCrxId, true)); 1518b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(extension_service()->GetExtensionById(kAdBlockCrxId, false)); 1519b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1520b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1521b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, HomepageLocation) { 1522b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 1523b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 1524b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 1525b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return; 1526b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 1527b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1528b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that the homepage can be configured with policies. 1529b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Set a default, and check that the home button navigates there. 1530b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->profile()->GetPrefs()->SetString( 1531b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch prefs::kHomePage, chrome::kChromeUIPolicyURL); 1532b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->profile()->GetPrefs()->SetBoolean( 1533b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch prefs::kHomePageIsNewTabPage, false); 1534b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(GURL(chrome::kChromeUIPolicyURL), 1535b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->profile()->GetHomePage()); 1536b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WebContents* contents = 1537b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 1538b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(GURL(content::kAboutBlankURL), contents->GetURL()); 1539b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_HOME)); 1540b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(GURL(chrome::kChromeUIPolicyURL), contents->GetURL()); 1541b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1542b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Now override with policy. 1543b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1544b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, 1545b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 1546b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateStringValue(chrome::kChromeUICreditsURL), 1547b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch NULL); 1548b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1549b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_HOME)); 1550b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WaitForLoadStop(contents); 1551b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(GURL(chrome::kChromeUICreditsURL), contents->GetURL()); 1552b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1553b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kHomepageIsNewTabPage, POLICY_LEVEL_MANDATORY, 1554b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1555b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1556b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_HOME)); 1557b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WaitForLoadStop(contents); 1558b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), contents->GetURL()); 1559b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1560b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1561b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, IncognitoEnabled) { 1562b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that incognito windows can't be opened when disabled by policy. 1563b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1564b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const BrowserList* active_browser_list = 1565b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch BrowserList::GetInstance(chrome::GetActiveDesktop()); 156669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 1567b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Disable incognito via policy and verify that incognito windows can't be 1568b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // opened. 1569b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(1u, active_browser_list->size()); 1570b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(BrowserList::IsOffTheRecordSessionActive()); 1571b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1572b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kIncognitoEnabled, POLICY_LEVEL_MANDATORY, 1573b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 1574b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1575b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(chrome::ExecuteCommand(browser(), IDC_NEW_INCOGNITO_WINDOW)); 1576b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(1u, active_browser_list->size()); 1577b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(BrowserList::IsOffTheRecordSessionActive()); 1578257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1579b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Enable via policy and verify that incognito windows can be opened. 1580b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kIncognitoEnabled, POLICY_LEVEL_MANDATORY, 1581b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1582b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1583b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_NEW_INCOGNITO_WINDOW)); 1584b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(2u, active_browser_list->size()); 1585b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(BrowserList::IsOffTheRecordSessionActive()); 15863fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch} 1587b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1588b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, Javascript) { 1589b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that Javascript can be disabled. 1590b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WebContents* contents = 1591b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 1592b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(IsJavascriptEnabled(contents)); 1593b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEV_TOOLS)); 1594b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEV_TOOLS_CONSOLE)); 15958b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch 1596b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Disable Javascript via policy. 1597b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1598b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kJavascriptEnabled, POLICY_LEVEL_MANDATORY, 1599b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 1600b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1601b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Reload the page. 1602b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(content::kAboutBlankURL)); 1603b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(IsJavascriptEnabled(contents)); 1604b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Developer tools still work when javascript is disabled. 1605b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEV_TOOLS)); 1606b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEV_TOOLS_CONSOLE)); 1607b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Javascript is always enabled for the internal pages. 1608b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)); 1609b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(IsJavascriptEnabled(contents)); 1610b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1611b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The javascript content setting policy overrides the javascript policy. 1612b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(content::kAboutBlankURL)); 1613b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(IsJavascriptEnabled(contents)); 1614b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDefaultJavaScriptSetting, POLICY_LEVEL_MANDATORY, 1615b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 1616b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue(CONTENT_SETTING_ALLOW), NULL); 1617b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1618b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(content::kAboutBlankURL)); 1619b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(IsJavascriptEnabled(contents)); 1620b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1621b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1622b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, SavingBrowserHistoryDisabled) { 1623b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that browsing history is not saved. 1624b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1625b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kSavingBrowserHistoryDisabled, POLICY_LEVEL_MANDATORY, 1626b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1627b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1628b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch GURL url = ui_test_utils::GetTestUrl( 1629b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath(base::FilePath::kCurrentDirectory), 1630b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath(FILE_PATH_LITERAL("empty.html"))); 1631b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1632b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the navigation wasn't saved in the history. 1633b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::HistoryEnumerator enumerator1(browser()->profile()); 1634b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(0u, enumerator1.urls().size()); 1635b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1636b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Now flip the policy and try again. 1637b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kSavingBrowserHistoryDisabled, POLICY_LEVEL_MANDATORY, 1638b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 1639b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1640b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1641b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the navigation was saved in the history. 1642b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::HistoryEnumerator enumerator2(browser()->profile()); 1643b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_EQ(1u, enumerator2.urls().size()); 1644b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(url, enumerator2.urls()[0]); 1645b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1646b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1647b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// http://crbug.com/241691 PolicyTest.TranslateEnabled is failing regularly. 1648b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DISABLED_TranslateEnabled) { 1649b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that translate can be forced enabled or disabled by policy. 1650b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1651b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Get the InfoBarService, and verify that there are no infobars on startup. 1652b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WebContents* contents = 1653b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 1654b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(contents); 1655b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch InfoBarService* infobar_service = InfoBarService::FromWebContents(contents); 1656b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(infobar_service); 1657b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(0u, infobar_service->infobar_count()); 1658b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1659b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Force enable the translate feature. 1660b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1661b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kTranslateEnabled, POLICY_LEVEL_MANDATORY, 1662b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1663b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1664257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Instead of waiting for NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, this test 166544f0eee88ff00398ff7f715fab053374d808c90dSteve Block // waits for NOTIFICATION_TAB_LANGUAGE_DETERMINED because that's what the 166644f0eee88ff00398ff7f715fab053374d808c90dSteve Block // TranslateManager observes. This allows checking that an infobar is NOT 166744f0eee88ff00398ff7f715fab053374d808c90dSteve Block // shown below, without polling for infobars for some indeterminate amount 166844f0eee88ff00398ff7f715fab053374d808c90dSteve Block // of time. 166944f0eee88ff00398ff7f715fab053374d808c90dSteve Block GURL url = ui_test_utils::GetTestUrl( 167044f0eee88ff00398ff7f715fab053374d808c90dSteve Block base::FilePath(), 1671257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::FilePath(FILE_PATH_LITERAL("translate/fr_test.html"))); 1672257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::WindowedNotificationObserver language_observer1( 167344f0eee88ff00398ff7f715fab053374d808c90dSteve Block chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 1674257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::NotificationService::AllSources()); 1675257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1676257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch language_observer1.Wait(); 167744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 167844f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Verify the translation detected for this tab. 167944f0eee88ff00398ff7f715fab053374d808c90dSteve Block TranslateTabHelper* translate_tab_helper = 1680257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch TranslateTabHelper::FromWebContents(contents); 168144f0eee88ff00398ff7f715fab053374d808c90dSteve Block ASSERT_TRUE(translate_tab_helper); 1682257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch LanguageState& language_state = translate_tab_helper->language_state(); 168344f0eee88ff00398ff7f715fab053374d808c90dSteve Block EXPECT_EQ("fr", language_state.original_language()); 1684257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_TRUE(language_state.page_needs_translation()); 1685257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_FALSE(language_state.translation_pending()); 168644f0eee88ff00398ff7f715fab053374d808c90dSteve Block EXPECT_FALSE(language_state.translation_declined()); 168744f0eee88ff00398ff7f715fab053374d808c90dSteve Block EXPECT_FALSE(language_state.IsPageTranslated()); 168844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1689257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verify that the translate infobar showed up. 169044f0eee88ff00398ff7f715fab053374d808c90dSteve Block ASSERT_EQ(1u, infobar_service->infobar_count()); 169144f0eee88ff00398ff7f715fab053374d808c90dSteve Block InfoBarDelegate* infobar = infobar_service->infobar_at(0); 169244f0eee88ff00398ff7f715fab053374d808c90dSteve Block TranslateInfoBarDelegate* translate_infobar_delegate = 169344f0eee88ff00398ff7f715fab053374d808c90dSteve Block infobar->AsTranslateInfoBarDelegate(); 169444f0eee88ff00398ff7f715fab053374d808c90dSteve Block ASSERT_TRUE(translate_infobar_delegate); 169544f0eee88ff00398ff7f715fab053374d808c90dSteve Block EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, 169644f0eee88ff00398ff7f715fab053374d808c90dSteve Block translate_infobar_delegate->infobar_type()); 1697257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch EXPECT_EQ("fr", translate_infobar_delegate->original_language_code()); 1698b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1699b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Now force disable translate. 1700b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch infobar_service->RemoveInfoBar(infobar); 1701b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(0u, infobar_service->infobar_count()); 1702b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kTranslateEnabled, POLICY_LEVEL_MANDATORY, 1703b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 1704b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1705b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Navigating to the same URL now doesn't trigger an infobar. 1706b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WindowedNotificationObserver language_observer2( 17078b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 1708b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::NotificationService::AllSources()); 1709b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1710b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch language_observer2.Wait(); 1711b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(0u, infobar_service->infobar_count()); 1712b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1713b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1714b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, URLBlacklist) { 1715b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Checks that URLs can be blacklisted, and that exceptions can be made to 1716b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // the blacklist. 1717b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1718b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Filter |kURLS| on IO thread, so that requests to those hosts end up 1719b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // as URLRequestMockHTTPJobs. 1720b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const char* kURLS[] = { 1721b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "http://aaa.com/empty.html", 1722b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "http://bbb.com/empty.html", 1723b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "http://sub.bbb.com/empty.html", 1724b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "http://bbb.com/policy/blank.html", 1725b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch }; 1726b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch { 1727b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::RunLoop loop; 1728b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch BrowserThread::PostTaskAndReply( 1729b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch BrowserThread::IO, FROM_HERE, 1730b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Bind(RedirectHostsToTestData, kURLS, arraysize(kURLS)), 1731b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch loop.QuitClosure()); 1732b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch loop.Run(); 1733b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1734b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1735b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that "bbb.com" opens before applying the blacklist. 1736b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckCanOpenURL(browser(), kURLS[1]); 1737b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1738b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Set a blacklist. 1739b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue blacklist; 1740b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch blacklist.Append(base::Value::CreateStringValue("bbb.com")); 1741b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1742b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kURLBlacklist, POLICY_LEVEL_MANDATORY, 1743b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, blacklist.DeepCopy(), NULL); 1744b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1745b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch FlushBlacklistPolicy(); 1746b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // All bbb.com URLs are blocked, and "aaa.com" is still unblocked. 1747b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckCanOpenURL(browser(), kURLS[0]); 1748b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch for (size_t i = 1; i < arraysize(kURLS); ++i) 1749b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckURLIsBlocked(browser(), kURLS[i]); 1750b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1751b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Whitelist some sites of bbb.com. 1752b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue whitelist; 1753b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch whitelist.Append(base::Value::CreateStringValue("sub.bbb.com")); 1754b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch whitelist.Append(base::Value::CreateStringValue("bbb.com/policy")); 1755b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kURLWhitelist, POLICY_LEVEL_MANDATORY, 1756b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, whitelist.DeepCopy(), NULL); 1757b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1758b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch FlushBlacklistPolicy(); 1759b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckURLIsBlocked(browser(), kURLS[1]); 1760b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckCanOpenURL(browser(), kURLS[2]); 1761b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckCanOpenURL(browser(), kURLS[3]); 1762b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1763b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch { 1764b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::RunLoop loop; 1765b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch BrowserThread::PostTaskAndReply( 1766b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch BrowserThread::IO, FROM_HERE, 1767b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Bind(UndoRedirectHostsToTestData, kURLS, arraysize(kURLS)), 1768b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch loop.QuitClosure()); 1769b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch loop.Run(); 1770b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 1771b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1772b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1773b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, FileURLBlacklist) { 1774b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Check that FileURLs can be blacklisted and DisabledSchemes works together 1775b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // with URLblacklisting and URLwhitelisting. 1776b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1777b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::FilePath test_path; 1778b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PathService::Get(chrome::DIR_TEST_DATA, &test_path); 1779b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const std::string base_path = "file://" + test_path.AsUTF8Unsafe() +"/"; 178069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch const std::string folder_path = base_path + "apptest/"; 1781b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const std::string file_path1 = base_path + "title1.html"; 1782b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const std::string file_path2 = folder_path + "basic.html"; 1783b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1784b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckCanOpenURL(browser(), file_path1.c_str()); 1785b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckCanOpenURL(browser(), file_path2.c_str()); 1786b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1787b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Set a blacklist for all the files. 1788b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue blacklist; 1789b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch blacklist.Append(base::Value::CreateStringValue("file://*")); 1790b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1791b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kURLBlacklist, POLICY_LEVEL_MANDATORY, 1792257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch POLICY_SCOPE_USER, blacklist.DeepCopy(), NULL); 1793b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1794b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch FlushBlacklistPolicy(); 1795b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1796b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckURLIsBlocked(browser(), file_path1.c_str()); 1797b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckURLIsBlocked(browser(), file_path2.c_str()); 1798b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1799b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Replace the URLblacklist with disabling the file scheme. 18003fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch blacklist.Remove(base::StringValue("file://*"), NULL); 1801b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kURLBlacklist, POLICY_LEVEL_MANDATORY, 1802b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, blacklist.DeepCopy(), NULL); 1803b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1804b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch FlushBlacklistPolicy(); 1805b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1806b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PrefService* prefs = browser()->profile()->GetPrefs(); 1807b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const base::ListValue* list_url = prefs->GetList(prefs::kUrlBlacklist); 1808b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(list_url->Find(base::StringValue("file://*")), 18098b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch list_url->end()); 1810b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1811b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue disabledscheme; 1812b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch disabledscheme.Append(base::Value::CreateStringValue("file")); 1813b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kDisabledSchemes, POLICY_LEVEL_MANDATORY, 1814b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, disabledscheme.DeepCopy(), NULL); 1815b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1816b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch FlushBlacklistPolicy(); 1817b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1818b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch list_url = prefs->GetList(prefs::kUrlBlacklist); 1819b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_NE(list_url->Find(base::StringValue("file://*")), 1820b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch list_url->end()); 1821b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1822b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Whitelist one folder and blacklist an another just inside. 1823b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue whitelist; 1824b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch whitelist.Append(base::Value::CreateStringValue(base_path)); 1825b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kURLWhitelist, POLICY_LEVEL_MANDATORY, 1826b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, whitelist.DeepCopy(), NULL); 1827b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch blacklist.Append(base::Value::CreateStringValue(folder_path)); 1828b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kURLBlacklist, POLICY_LEVEL_MANDATORY, 1829b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, blacklist.DeepCopy(), NULL); 1830b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1831b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch FlushBlacklistPolicy(); 1832b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1833b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckCanOpenURL(browser(), file_path1.c_str()); 1834b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CheckURLIsBlocked(browser(), file_path2.c_str()); 1835b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1836b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1837b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Flaky on Linux. http://crbug.com/155459 1838b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#if defined(OS_LINUX) 1839b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define MAYBE_DisableScreenshotsFeedback DISABLED_DisableScreenshotsFeedback 1840b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#else 1841b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define MAYBE_DisableScreenshotsFeedback DisableScreenshotsFeedback 1842b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 1843b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, MAYBE_DisableScreenshotsFeedback) { 1844b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 1845b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 1846b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 1847b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return; 1848b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 1849b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1850b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Make sure current screenshot can be taken and displayed on feedback page. 1851b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch TestScreenshotFeedback(true); 1852b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1853b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Check if banning screenshots disabled feedback page's ability to grab a 1854b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // screenshot. 1855b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch TestScreenshotFeedback(false); 1856b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1857b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1858b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#if defined(OS_CHROMEOS) 1859b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DisableScreenshotsFile) { 1860b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch int screenshot_count = CountScreenshots(); 1861b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1862b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Make sure screenshots are counted correctly. 1863b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch TestScreenshotFile(true); 1864b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_EQ(CountScreenshots(), screenshot_count + 1); 1865b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1866b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Check if trying to take a screenshot fails when disabled by policy. 1867b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch TestScreenshotFile(false); 1868b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_EQ(CountScreenshots(), screenshot_count + 1); 1869b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1870b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1871b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, DisableAudioOutput) { 1872b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Set up the mock observer. 1873b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::CrasAudioHandler* audio_handler = chromeos::CrasAudioHandler::Get(); 1874b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch scoped_ptr<TestAudioObserver> test_observer(new TestAudioObserver); 1875b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch audio_handler->AddAudioObserver(test_observer.get()); 1876b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1877257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch bool prior_state = audio_handler->IsOutputMuted(); 1878b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Make sure the audio is not muted and then toggle the policy and observe 1879b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // if the output mute changed event is fired. 188044f0eee88ff00398ff7f715fab053374d808c90dSteve Block audio_handler->SetOutputMute(false); 188144f0eee88ff00398ff7f715fab053374d808c90dSteve Block EXPECT_FALSE(audio_handler->IsOutputMuted()); 1882b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(1, test_observer->output_mute_changed_count()); 1883b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1884b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kAudioOutputAllowed, POLICY_LEVEL_MANDATORY, 1885b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(false), NULL); 1886b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1887b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(audio_handler->IsOutputMuted()); 1888b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // This should not change the state now and should not trigger output mute 1889b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // changed event. 1890b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch audio_handler->SetOutputMute(false); 1891b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(audio_handler->IsOutputMuted()); 1892b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(1, test_observer->output_mute_changed_count()); 1893b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1894b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Toggle back and observe if the output mute changed event is fired. 1895b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kAudioOutputAllowed, POLICY_LEVEL_MANDATORY, 1896b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true), NULL); 1897b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1898b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(audio_handler->IsOutputMuted()); 1899b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(1, test_observer->output_mute_changed_count()); 1900b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch audio_handler->SetOutputMute(true); 1901b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(audio_handler->IsOutputMuted()); 1902b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(2, test_observer->output_mute_changed_count()); 1903b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Revert the prior state. 1904b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch audio_handler->SetOutputMute(prior_state); 1905b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch audio_handler->RemoveAudioObserver(test_observer.get()); 1906b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1907b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1908b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, PRE_SessionLengthLimit) { 1909b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Set the session start time to 2 hours ago. 1910b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch g_browser_process->local_state()->SetInt64( 19118b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch prefs::kSessionStartTime, 1912b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch (base::TimeTicks::Now() - base::TimeDelta::FromHours(2)) 1913b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch .ToInternalValue()); 1914b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1915b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1916b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, SessionLengthLimit) { 1917b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::MockNotificationObserver observer; 1918b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::NotificationRegistrar registrar; 1919b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch registrar.Add(&observer, 1920b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chrome::NOTIFICATION_APP_TERMINATING, 1921b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::NotificationService::AllSources()); 1922b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1923b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Set the session length limit to 3 hours. Verify that the session is not 1924b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // terminated. 1925b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_CALL(observer, Observe(chrome::NOTIFICATION_APP_TERMINATING, _, _)) 1926b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch .Times(0); 1927b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1928b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kSessionLengthLimit, POLICY_LEVEL_MANDATORY, 1929b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 1930b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue(180 * 60 * 1000), // 3 hours. 1931b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch NULL); 1932b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1933b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::RunLoop().RunUntilIdle(); 1934b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch Mock::VerifyAndClearExpectations(&observer); 1935b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1936b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Decrease the session length limit to 1 hour. Verify that the session is 1937b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // terminated immediately. 1938b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_CALL(observer, Observe(chrome::NOTIFICATION_APP_TERMINATING, _, _)); 1939b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kSessionLengthLimit, POLICY_LEVEL_MANDATORY, 1940b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 1941b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue(60 * 60 * 1000), // 1 hour. 1942b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch NULL); 1943b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1944b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::RunLoop().RunUntilIdle(); 1945b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch Mock::VerifyAndClearExpectations(&observer); 1946b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1947b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1948b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, LargeCursorEnabled) { 1949b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that the large cursor accessibility feature can be controlled 1950b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // through policy. 1951b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::AccessibilityManager* accessibility_manager = 1952b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::AccessibilityManager::Get(); 1953b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1954b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Manually enable the large cursor. 1955b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch accessibility_manager->EnableLargeCursor(true); 1956b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(accessibility_manager->IsLargeCursorEnabled()); 1957b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1958b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that policy overrides the manual setting. 1959b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1960b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kLargeCursorEnabled, POLICY_LEVEL_MANDATORY, 1961b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 1962b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateBooleanValue(false), NULL); 1963b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1964b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(accessibility_manager->IsLargeCursorEnabled()); 1965b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1966b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the large cursor cannot be enabled manually anymore. 1967b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch accessibility_manager->EnableLargeCursor(true); 1968b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(accessibility_manager->IsLargeCursorEnabled()); 1969b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1970b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1971b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, SpokenFeedbackEnabled) { 1972b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that the spoken feedback accessibility feature can be controlled 1973b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // through policy. 1974b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::AccessibilityManager* accessibility_manager = 1975b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::AccessibilityManager::Get(); 1976b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1977b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Manually enable spoken feedback. 1978b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch accessibility_manager->EnableSpokenFeedback( 197969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch true, ash::A11Y_NOTIFICATION_NONE); 1980b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(accessibility_manager->IsSpokenFeedbackEnabled()); 1981b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1982b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that policy overrides the manual setting. 1983b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 1984b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kSpokenFeedbackEnabled, POLICY_LEVEL_MANDATORY, 1985b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 1986b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateBooleanValue(false), NULL); 1987b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 1988b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(accessibility_manager->IsSpokenFeedbackEnabled()); 1989b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1990b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that spoken feedback cannot be enabled manually anymore. 1991257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch accessibility_manager->EnableSpokenFeedback( 1992b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch true, ash::A11Y_NOTIFICATION_NONE); 1993b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(accessibility_manager->IsSpokenFeedbackEnabled()); 1994b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 1995b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 1996b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, HighContrastEnabled) { 1997b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that the high contrast mode accessibility feature can be 1998b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // controlled through policy. 19993fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch chromeos::AccessibilityManager* accessibility_manager = 2000b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::AccessibilityManager::Get(); 2001b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2002b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Manually enable high contrast mode. 2003b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch accessibility_manager->EnableHighContrast(true); 2004b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(accessibility_manager->IsHighContrastEnabled()); 2005b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2006b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that policy overrides the manual setting. 2007b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 20088b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch policies.Set(key::kHighContrastEnabled, POLICY_LEVEL_MANDATORY, 2009b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 2010b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateBooleanValue(false), NULL); 2011b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 2012b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(accessibility_manager->IsHighContrastEnabled()); 2013b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2014b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that high contrast mode cannot be enabled manually anymore. 2015b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch accessibility_manager->EnableHighContrast(true); 2016b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(accessibility_manager->IsHighContrastEnabled()); 2017b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 2018b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2019b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ScreenMagnifierTypeNone) { 2020b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that the screen magnifier can be disabled through policy. 2021b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::MagnificationManager* magnification_manager = 2022b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::MagnificationManager::Get(); 2023b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2024b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Manually enable the full-screen magnifier. 2025b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch magnification_manager->SetMagnifierType(ash::MAGNIFIER_FULL); 2026b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch magnification_manager->SetMagnifierEnabled(true); 2027b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(ash::MAGNIFIER_FULL, magnification_manager->GetMagnifierType()); 2028b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(magnification_manager->IsMagnifierEnabled()); 20291e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 2030b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that policy overrides the manual setting. 2031b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 2032b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kScreenMagnifierType, POLICY_LEVEL_MANDATORY, 2033b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 2034b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue(0), NULL); 2035b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 2036b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(magnification_manager->IsMagnifierEnabled()); 2037b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2038b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the screen magnifier cannot be enabled manually anymore. 2039b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch magnification_manager->SetMagnifierEnabled(true); 2040b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(magnification_manager->IsMagnifierEnabled()); 2041b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 2042b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2043b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyTest, ScreenMagnifierTypeFull) { 2044b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that the full-screen magnifier can be enabled through policy. 2045b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::MagnificationManager* magnification_manager = 2046b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chromeos::MagnificationManager::Get(); 2047b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2048b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the screen magnifier is initially disabled. 2049b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_FALSE(magnification_manager->IsMagnifierEnabled()); 2050b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2051b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that policy can enable the full-screen magnifier. 2052b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 2053b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set(key::kScreenMagnifierType, POLICY_LEVEL_MANDATORY, 2054b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch POLICY_SCOPE_USER, 2055b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue(ash::MAGNIFIER_FULL), NULL); 2056b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch UpdateProviderPolicy(policies); 2057b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_EQ(ash::MAGNIFIER_FULL, magnification_manager->GetMagnifierType()); 2058b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(magnification_manager->IsMagnifierEnabled()); 2059b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2060b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verify that the screen magnifier cannot be disabled manually anymore. 2061b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch magnification_manager->SetMagnifierEnabled(false); 2062b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_TRUE(magnification_manager->IsMagnifierEnabled()); 2063b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 2064b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2065b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif 2066b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2067b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochnamespace { 2068b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2069b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochstatic const char* kRestoredURLs[] = { 2070b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "http://aaa.com/empty.html", 2071b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "http://bbb.com/empty.html", 2072b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 2073257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2074e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdochbool IsNonSwitchArgument(const CommandLine::StringType& s) { 2075257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch return s.empty() || s[0] != '-'; 20761e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block} 20771e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 20781e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block} // namespace 20791e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 20801e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block// Similar to PolicyTest but allows setting policies before the browser is 20811e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block// created. Each test parameter is a method that sets up the early policies 20823fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch// and stores the expected startup URLs in |expected_urls_|. 20831e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockclass RestoreOnStartupPolicyTest 2084257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch : public PolicyTest, 20851e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block public testing::WithParamInterface< 20861e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block void (RestoreOnStartupPolicyTest::*)(void)> { 20871e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block public: 20881e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block RestoreOnStartupPolicyTest() {} 20891e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block virtual ~RestoreOnStartupPolicyTest() {} 20901e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 20911e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#if defined(OS_CHROMEOS) 20923fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 20931e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // TODO(nkostylev): Investigate if we can remove this switch. 2094257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch command_line->AppendSwitch(switches::kCreateBrowserOnStartupForTests); 20951e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block PolicyTest::SetUpCommandLine(command_line); 20961e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block } 20971e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block#endif 20981e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 20991e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 21001e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block PolicyTest::SetUpInProcessBrowserTestFixture(); 21011e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // Set early policies now, before the browser is created. 21021e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block (this->*(GetParam()))(); 21031e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 21041e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block // Remove the non-switch arguments, so that session restore kicks in for 2105257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // these tests. 2106b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CommandLine* command_line = CommandLine::ForCurrentProcess(); 2107b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CommandLine::StringVector argv = command_line->argv(); 2108b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch argv.erase(std::remove_if(++argv.begin(), argv.end(), IsNonSwitchArgument), 2109b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch argv.end()); 2110b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch command_line->InitFromArgv(argv); 2111b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ASSERT_TRUE(std::equal(argv.begin(), argv.end(), 2112b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch command_line->argv().begin())); 2113b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 21143fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch // Redirect the test URLs to the test data directory. 2115b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch RedirectHostsToTestData(kRestoredURLs, arraysize(kRestoredURLs)); 2116b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2117b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2118b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch void HomepageIsNotNTP() { 2119b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that policy can set the startup pages to the homepage, when 2120b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // the homepage is not the NTP. 2121b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 2122b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set( 2123b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch key::kRestoreOnStartup, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2124b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue( 2125b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch SessionStartupPref::kPrefValueHomePage), 2126b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch NULL); 2127b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set( 2128b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch key::kHomepageIsNewTabPage, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 21293fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch base::Value::CreateBooleanValue(false), NULL); 2130b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set( 2131b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2132b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateStringValue(kRestoredURLs[1]), NULL); 2133b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch provider_.UpdateChromePolicy(policies); 2134b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2135b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch expected_urls_.push_back(GURL(kRestoredURLs[1])); 2136b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2137b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2138b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch void HomepageIsNTP() { 2139b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that policy can set the startup pages to the homepage, when 2140b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // the homepage is the NTP. 2141b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 2142b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set( 2143b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch key::kRestoreOnStartup, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2144b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue( 2145257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch SessionStartupPref::kPrefValueHomePage), 214680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen NULL); 2147b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set( 2148b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch key::kHomepageIsNewTabPage, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 214980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Value::CreateBooleanValue(true), NULL); 215080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen provider_.UpdateChromePolicy(policies); 215180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 215280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen expected_urls_.push_back(GURL(chrome::kChromeUINewTabURL)); 215380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 2154b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2155b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch void ListOfURLs() { 2156b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that policy can set the startup pages to a list of URLs. 2157b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue urls; 2158b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch for (size_t i = 0; i < arraysize(kRestoredURLs); ++i) { 2159b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch urls.Append(base::Value::CreateStringValue(kRestoredURLs[i])); 2160b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch expected_urls_.push_back(GURL(kRestoredURLs[i])); 2161b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2162b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 2163b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies.Set( 2164b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch key::kRestoreOnStartup, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2165b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue(SessionStartupPref::kPrefValueURLs), 2166b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch NULL); 216780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen policies.Set( 216880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen key::kRestoreOnStartupURLs, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2169b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch urls.DeepCopy(), NULL); 2170b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch provider_.UpdateChromePolicy(policies); 2171b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2172b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2173257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch void NTP() { 2174257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that policy can set the startup page to the NTP. 2175b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 21763fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch policies.Set( 2177b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch key::kRestoreOnStartup, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2178b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue(SessionStartupPref::kPrefValueNewTab), 2179b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch NULL); 2180b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch provider_.UpdateChromePolicy(policies); 2181b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch expected_urls_.push_back(GURL(chrome::kChromeUINewTabURL)); 2182b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2183b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2184b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch void Last() { 2185b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Verifies that policy can set the startup pages to the last session. 2186b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch PolicyMap policies; 2187257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch policies.Set( 2188b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch key::kRestoreOnStartup, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2189b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateIntegerValue(SessionStartupPref::kPrefValueLast), 2190b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch NULL); 219144f0eee88ff00398ff7f715fab053374d808c90dSteve Block provider_.UpdateChromePolicy(policies); 219244f0eee88ff00398ff7f715fab053374d808c90dSteve Block // This should restore the tabs opened at PRE_RunTest below. 2193b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch for (size_t i = 0; i < arraysize(kRestoredURLs); ++i) 2194b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch expected_urls_.push_back(GURL(kRestoredURLs[i])); 2195b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2196b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2197b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch std::vector<GURL> expected_urls_; 2198b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}; 2199b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2200b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochIN_PROC_BROWSER_TEST_P(RestoreOnStartupPolicyTest, PRE_RunTest) { 2201b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Open some tabs to verify if they are restored after the browser restarts. 22028b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch // Most policy settings override this, except kPrefValueLast which enforces 2203b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // a restore. 2204b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), GURL(kRestoredURLs[0])); 2205b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch for (size_t i = 1; i < arraysize(kRestoredURLs); ++i) { 2206b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WindowedNotificationObserver observer( 2207b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::NOTIFICATION_LOAD_STOP, 2208b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::NotificationService::AllSources()); 2209b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch chrome::AddSelectedTabWithURL(browser(), GURL(kRestoredURLs[i]), 2210b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::PAGE_TRANSITION_LINK); 221180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen observer.Wait(); 2212b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 221380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 221480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 221580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian MonsenIN_PROC_BROWSER_TEST_P(RestoreOnStartupPolicyTest, RunTest) { 221680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#if defined(OS_WIN) && defined(USE_ASH) 221780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // Disable this test in Metro+Ash for now (http://crbug.com/262796). 221880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 221980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen return; 222080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#endif 222180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 222280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen TabStripModel* model = browser()->tab_strip_model(); 222380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen int size = static_cast<int>(expected_urls_.size()); 222480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen EXPECT_EQ(size, model->count()); 222544f0eee88ff00398ff7f715fab053374d808c90dSteve Block for (int i = 0; i < size && i < model->count(); ++i) { 222644f0eee88ff00398ff7f715fab053374d808c90dSteve Block EXPECT_EQ(expected_urls_[i], model->GetWebContentsAt(i)->GetURL()); 222744f0eee88ff00398ff7f715fab053374d808c90dSteve Block } 222880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 2229b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 223080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian MonsenINSTANTIATE_TEST_CASE_P( 223180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen RestoreOnStartupPolicyTestInstance, 223280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen RestoreOnStartupPolicyTest, 223344f0eee88ff00398ff7f715fab053374d808c90dSteve Block testing::Values(&RestoreOnStartupPolicyTest::HomepageIsNotNTP, 223444f0eee88ff00398ff7f715fab053374d808c90dSteve Block &RestoreOnStartupPolicyTest::HomepageIsNTP, 223544f0eee88ff00398ff7f715fab053374d808c90dSteve Block &RestoreOnStartupPolicyTest::ListOfURLs, 223644f0eee88ff00398ff7f715fab053374d808c90dSteve Block &RestoreOnStartupPolicyTest::NTP, 223744f0eee88ff00398ff7f715fab053374d808c90dSteve Block &RestoreOnStartupPolicyTest::Last)); 223844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 223980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// Similar to PolicyTest but sets a couple of policies before the browser is 224080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// started. 224180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenclass PolicyStatisticsCollectorTest : public PolicyTest { 224280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen public: 224380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen PolicyStatisticsCollectorTest() {} 224480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen virtual ~PolicyStatisticsCollectorTest() {} 224544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 224680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 224780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen PolicyTest::SetUpInProcessBrowserTestFixture(); 224880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen PolicyMap policies; 224980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen policies.Set( 225080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 225180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Value::CreateBooleanValue(true), NULL); 225280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen policies.Set( 225380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen key::kBookmarkBarEnabled, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 225480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Value::CreateBooleanValue(false), NULL); 225580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen policies.Set( 225680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 225780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Value::CreateStringValue("http://chromium.org"), NULL); 225880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen provider_.UpdateChromePolicy(policies); 225980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 226080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen}; 2261257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 226280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian MonsenIN_PROC_BROWSER_TEST_F(PolicyStatisticsCollectorTest, Startup) { 2263257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Verifies that policy usage histograms are collected at startup. 226480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 2265257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // BrowserPolicyConnector::Init() has already been called. Make sure the 226680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // CompleteInitialization() task has executed as well. 226780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::RunAllPendingInMessageLoop(); 2268b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2269b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch GURL kAboutHistograms = GURL(std::string(chrome::kAboutScheme) + 2270b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch std::string(content::kStandardSchemeSeparator) + 2271b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch std::string(content::kChromeUIHistogramHost)); 2272b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch ui_test_utils::NavigateToURL(browser(), kAboutHistograms); 2273b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::WebContents* contents = 2274b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 227580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen std::string text; 227680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT_TRUE(content::ExecuteScriptAndExtractString( 227780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen contents, 227880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen "var nodes = document.querySelectorAll('body > pre');" 227980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen "var result = '';" 2280b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "for (var i = 0; i < nodes.length; ++i) {" 2281b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch " var text = nodes[i].innerHTML;" 2282b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch " if (text.indexOf('Histogram: Enterprise.Policies') === 0) {" 2283b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch " result = text;" 2284b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch " break;" 2285b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch " }" 2286b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "}" 2287b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch "domAutomationController.send(result);", 2288b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch &text)); 228980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT_FALSE(text.empty()); 229080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen const std::string kExpectedLabel = 229180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen "Histogram: Enterprise.Policies recorded 3 samples"; 229280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen EXPECT_EQ(kExpectedLabel, text.substr(0, kExpectedLabel.size())); 229380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // HomepageLocation has policy ID 1. 2294b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_NE(std::string::npos, text.find("<br>1 ---")); 2295b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // ShowHomeButton has policy ID 35. 2296b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_NE(std::string::npos, text.find("<br>35 ---")); 2297b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // BookmarkBarEnabled has policy ID 82. 2298b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch EXPECT_NE(std::string::npos, text.find("<br>82 ---")); 2299b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 2300b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2301b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochclass MediaStreamDevicesControllerBrowserTest 2302b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch : public PolicyTest, 2303b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public testing::WithParamInterface<bool> { 2304b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch public: 2305b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch MediaStreamDevicesControllerBrowserTest() 2306b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch : request_url_allowed_via_whitelist_(false) { 2307b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policy_value_ = GetParam(); 2308b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2309b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch virtual ~MediaStreamDevicesControllerBrowserTest() {} 2310b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2311b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Configure a given policy map. 2312b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // The |policy_name| is the name of either the audio or video capture allow 2313b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // policy and must never be NULL. 2314b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // |whitelist_policy| and |allow_rule| are optional. If NULL, no whitelist 2315b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // policy is set. If non-NULL, the request_url_ will be set to be non empty 2316b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // and the whitelist policy is set to contain either the |allow_rule| (if 2317b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // non-NULL) or an "allow all" wildcard. 231880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen void ConfigurePolicyMap(PolicyMap* policies, const char* policy_name, 2319b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const char* whitelist_policy, 2320b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch const char* allow_rule) { 2321b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch policies->Set(policy_name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2322b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Value::CreateBooleanValue(policy_value_), NULL); 2323b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 232444f0eee88ff00398ff7f715fab053374d808c90dSteve Block if (whitelist_policy) { 232544f0eee88ff00398ff7f715fab053374d808c90dSteve Block // TODO(tommi): Remove the kiosk mode flag when the whitelist is visible 232644f0eee88ff00398ff7f715fab053374d808c90dSteve Block // in the media exceptions UI. 2327b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // See discussion here: https://codereview.chromium.org/15738004/ 2328b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CommandLine::ForCurrentProcess()->AppendSwitch(switches::kKioskMode); 2329b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2330b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // Add an entry to the whitelist that allows the specified URL regardless 2331b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // of the setting of kAudioCapturedAllowed. 2332b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch request_url_ = GURL("http://www.example.com/foo"); 2333b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::ListValue* list = new base::ListValue(); 2334b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (allow_rule) { 2335b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch list->AppendString(allow_rule); 2336b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch request_url_allowed_via_whitelist_ = true; 2337b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } else { 2338b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch list->AppendString(ContentSettingsPattern::Wildcard().ToString()); 233980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // We should ignore all wildcard entries in the whitelist, so even 234080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // though we've added an entry, it should be ignored and our expectation 234180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // is that the request has not been allowed via the whitelist. 234280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen request_url_allowed_via_whitelist_ = false; 234380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 234480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen policies->Set(whitelist_policy, POLICY_LEVEL_MANDATORY, 234580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen POLICY_SCOPE_USER, list, NULL); 2346b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 234780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 234880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 234980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen void Accept(const content::MediaStreamDevices& devices, 235080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen scoped_ptr<content::MediaStreamUI> ui) { 235180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen if (policy_value_ || request_url_allowed_via_whitelist_) { 235280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT_EQ(1U, devices.size()); 235380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT_EQ("fake_dev", devices[0].id); 235480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } else { 235580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT_EQ(0U, devices.size()); 2356b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2357b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 2358b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2359b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch void FinishAudioTest() { 2360b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::MediaStreamRequest request(0, 0, 0, std::string(), 2361b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch request_url_.GetOrigin(), 2362b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::MEDIA_DEVICE_ACCESS, 2363257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch std::string(), std::string(), 2364b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::MEDIA_DEVICE_AUDIO_CAPTURE, 2365b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::MEDIA_NO_SERVICE); 2366b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // TODO(raymes): Test MEDIA_DEVICE_OPEN (Pepper) which grants both webcam 2367b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // and microphone permissions at the same time. 2368b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch MediaStreamDevicesController controller( 2369b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(), request, 2370b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Bind(&MediaStreamDevicesControllerBrowserTest::Accept, this)); 2371257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch controller.Accept(false); 2372b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 2373b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::MessageLoop::current()->QuitWhenIdle(); 2374257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 2375257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2376b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch void FinishVideoTest() { 2377b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // TODO(raymes): Test MEDIA_DEVICE_OPEN (Pepper) which grants both webcam 2378b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch // and microphone permissions at the same time. 2379b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::MediaStreamRequest request(0, 0, 0, std::string(), 2380b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch request_url_.GetOrigin(), 2381b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::MEDIA_DEVICE_ACCESS, 2382b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch std::string(), 2383257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch std::string(), 238480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::MEDIA_NO_SERVICE, 2385257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::MEDIA_DEVICE_VIDEO_CAPTURE); 238680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen MediaStreamDevicesController controller( 2387257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(), request, 2388257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Bind(&MediaStreamDevicesControllerBrowserTest::Accept, this)); 2389257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch controller.Accept(false); 2390257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2391257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::MessageLoop::current()->QuitWhenIdle(); 2392257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch } 2393257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2394257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch bool policy_value_; 2395257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch bool request_url_allowed_via_whitelist_; 2396257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch GURL request_url_; 2397257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static const char kExampleRequestPattern[]; 2398257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 2399257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2400257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch// static 2401257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochconst char MediaStreamDevicesControllerBrowserTest::kExampleRequestPattern[] = 2402257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch "http://[*.]example.com/"; 240380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 2404257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_P(MediaStreamDevicesControllerBrowserTest, 2405257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch AudioCaptureAllowed) { 2406257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::MediaStreamDevices audio_devices; 2407257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::MediaStreamDevice fake_audio_device( 2408257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::MEDIA_DEVICE_AUDIO_CAPTURE, "fake_dev", "Fake Audio Device"); 2409257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch audio_devices.push_back(fake_audio_device); 2410257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2411257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 2412257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ConfigurePolicyMap(&policies, key::kAudioCaptureAllowed, NULL, NULL); 2413257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch UpdateProviderPolicy(policies); 2414257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2415257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::BrowserThread::PostTaskAndReply( 2416257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::BrowserThread::IO, FROM_HERE, 2417257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Bind(&MediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged, 2418257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::Unretained(MediaCaptureDevicesDispatcher::GetInstance()), 2419257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch audio_devices), 242080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Bind(&MediaStreamDevicesControllerBrowserTest::FinishAudioTest, 2421257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch this)); 2422257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2423257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::MessageLoop::current()->Run(); 2424257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 2425257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 2426257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_P(MediaStreamDevicesControllerBrowserTest, 2427257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch AudioCaptureAllowedUrls) { 2428257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::MediaStreamDevices audio_devices; 2429257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::MediaStreamDevice fake_audio_device( 2430257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::MEDIA_DEVICE_AUDIO_CAPTURE, "fake_dev", "Fake Audio Device"); 2431257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch audio_devices.push_back(fake_audio_device); 243280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 2433257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch const char* allow_pattern[] = { 2434257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch kExampleRequestPattern, 2435257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // This will set an allow-all policy whitelist. Since we do not allow 2436257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // setting an allow-all entry in the whitelist, this entry should be ignored 2437257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // and therefore the request should be denied. 2438257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch NULL, 243980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen }; 244080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 244180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen for (size_t i = 0; i < arraysize(allow_pattern); ++i) { 244280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen PolicyMap policies; 244380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ConfigurePolicyMap(&policies, key::kAudioCaptureAllowed, 244480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen key::kAudioCaptureAllowedUrls, allow_pattern[i]); 244580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen UpdateProviderPolicy(policies); 244680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 244780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::BrowserThread::PostTaskAndReply( 244880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::BrowserThread::IO, FROM_HERE, 244980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Bind( 245080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen &MediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged, 245180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Unretained(MediaCaptureDevicesDispatcher::GetInstance()), 245280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen audio_devices), 245380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Bind( 245469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch &MediaStreamDevicesControllerBrowserTest::FinishAudioTest, 245580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen this)); 245680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 245780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::MessageLoop::current()->Run(); 245880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 245980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 246080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 246144f0eee88ff00398ff7f715fab053374d808c90dSteve BlockIN_PROC_BROWSER_TEST_P(MediaStreamDevicesControllerBrowserTest, 246244f0eee88ff00398ff7f715fab053374d808c90dSteve Block VideoCaptureAllowed) { 246380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::MediaStreamDevices video_devices; 246480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::MediaStreamDevice fake_video_device( 246580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::MEDIA_DEVICE_VIDEO_CAPTURE, "fake_dev", "Fake Video Device"); 246680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen video_devices.push_back(fake_video_device); 246780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 246880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen PolicyMap policies; 246944f0eee88ff00398ff7f715fab053374d808c90dSteve Block ConfigurePolicyMap(&policies, key::kVideoCaptureAllowed, NULL, NULL); 247080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen UpdateProviderPolicy(policies); 247180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 247280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::BrowserThread::PostTaskAndReply( 2473257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch content::BrowserThread::IO, FROM_HERE, 247480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Bind(&MediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged, 247580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Unretained(MediaCaptureDevicesDispatcher::GetInstance()), 247680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen video_devices), 247780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Bind(&MediaStreamDevicesControllerBrowserTest::FinishVideoTest, 247880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen this)); 247980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 248069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch base::MessageLoop::current()->Run(); 248180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 248280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 248380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian MonsenIN_PROC_BROWSER_TEST_P(MediaStreamDevicesControllerBrowserTest, 248480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen VideoCaptureAllowedUrls) { 248580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::MediaStreamDevices video_devices; 248680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::MediaStreamDevice fake_video_device( 248780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::MEDIA_DEVICE_VIDEO_CAPTURE, "fake_dev", "Fake Video Device"); 248844f0eee88ff00398ff7f715fab053374d808c90dSteve Block video_devices.push_back(fake_video_device); 248980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 249080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen const char* allow_pattern[] = { 249180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen kExampleRequestPattern, 249280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // This will set an allow-all policy whitelist. Since we do not allow 249380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // setting an allow-all entry in the whitelist, this entry should be ignored 249480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen // and therefore the request should be denied. 249544f0eee88ff00398ff7f715fab053374d808c90dSteve Block NULL, 249680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen }; 249780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 249880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen for (size_t i = 0; i < arraysize(allow_pattern); ++i) { 2499257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch PolicyMap policies; 250080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ConfigurePolicyMap(&policies, key::kVideoCaptureAllowed, 250180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen key::kVideoCaptureAllowedUrls, allow_pattern[i]); 250280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen UpdateProviderPolicy(policies); 250380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 250480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen content::BrowserThread::PostTaskAndReply( 2505b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch content::BrowserThread::IO, FROM_HERE, 2506b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Bind( 2507b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch &MediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged, 2508b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Unretained(MediaCaptureDevicesDispatcher::GetInstance()), 2509b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch video_devices), 2510b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch base::Bind( 2511b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch &MediaStreamDevicesControllerBrowserTest::FinishVideoTest, 251280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen this)); 251380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 2514257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch base::MessageLoop::current()->Run(); 251580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 25163fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch} 251780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 2518257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochINSTANTIATE_TEST_CASE_P(MediaStreamDevicesControllerBrowserTestInstance, 251980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen MediaStreamDevicesControllerBrowserTest, 252080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen testing::Bool()); 252180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 252280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#if !defined(OS_CHROMEOS) 252380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// Similar to PolicyTest but sets the proper policy before the browser is 252480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen// started. 252580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenclass PolicyVariationsServiceTest : public PolicyTest { 252680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen public: 252780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 252880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen PolicyTest::SetUpInProcessBrowserTestFixture(); 252980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen PolicyMap policies; 253080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen policies.Set( 2531257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch key::kVariationsRestrictParameter, 253280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen POLICY_LEVEL_MANDATORY, 25333fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch POLICY_SCOPE_USER, 253480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen base::Value::CreateStringValue("restricted"), 253580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen NULL); 253680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen provider_.UpdateChromePolicy(policies); 253780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 25383fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch}; 253980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 2540257744e915dfc84d6d07a6b2accf8402d9ffc708Ben MurdochIN_PROC_BROWSER_TEST_F(PolicyVariationsServiceTest, VariationsURLIsValid) { 254180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen const std::string default_variations_url = 254280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen chrome_variations::VariationsService:: 254380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen GetDefaultVariationsServerURLForTesting(); 254480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 254580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen const GURL url = 254680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen chrome_variations::VariationsService::GetVariationsServerURL( 254780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen g_browser_process->local_state()); 254880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen EXPECT_TRUE(StartsWithASCII(url.spec(), default_variations_url, true)); 254980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen std::string value; 255080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen EXPECT_TRUE(net::GetValueForKeyInQuery(url, "restrict", &value)); 255180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen EXPECT_EQ("restricted", value); 255280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 255380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#endif 255480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 255580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} // namespace policy 255680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen