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

Side by Side Diff: trunk/src/chrome/browser/chromeos/policy/device_local_account_browsertest.cc

Issue 60683002: Revert 233048 "Support policies referencing external data for de..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <string> 6 #include <string>
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/file_util.h" 13 #include "base/file_util.h"
14 #include "base/files/file_path.h" 14 #include "base/files/file_path.h"
15 #include "base/files/scoped_temp_dir.h" 15 #include "base/files/scoped_temp_dir.h"
16 #include "base/json/json_reader.h" 16 #include "base/json/json_reader.h"
17 #include "base/location.h"
18 #include "base/memory/ref_counted.h"
19 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
20 #include "base/message_loop/message_loop.h" 18 #include "base/message_loop/message_loop.h"
21 #include "base/message_loop/message_loop_proxy.h"
22 #include "base/path_service.h" 19 #include "base/path_service.h"
23 #include "base/run_loop.h" 20 #include "base/run_loop.h"
24 #include "base/sequenced_task_runner.h"
25 #include "base/strings/string_number_conversions.h" 21 #include "base/strings/string_number_conversions.h"
26 #include "base/strings/string_util.h" 22 #include "base/strings/string_util.h"
27 #include "base/strings/stringprintf.h" 23 #include "base/strings/stringprintf.h"
28 #include "base/strings/utf_string_conversions.h" 24 #include "base/strings/utf_string_conversions.h"
29 #include "base/test/scoped_path_override.h" 25 #include "base/test/scoped_path_override.h"
30 #include "base/values.h" 26 #include "base/values.h"
31 #include "chrome/browser/browser_process.h" 27 #include "chrome/browser/browser_process.h"
32 #include "chrome/browser/chrome_notification_types.h" 28 #include "chrome/browser/chrome_notification_types.h"
33 #include "chrome/browser/chromeos/login/existing_user_controller.h" 29 #include "chrome/browser/chromeos/login/existing_user_controller.h"
34 #include "chrome/browser/chromeos/login/login_display_host.h" 30 #include "chrome/browser/chromeos/login/login_display_host.h"
35 #include "chrome/browser/chromeos/login/login_display_host_impl.h" 31 #include "chrome/browser/chromeos/login/login_display_host_impl.h"
36 #include "chrome/browser/chromeos/login/mock_login_status_consumer.h" 32 #include "chrome/browser/chromeos/login/mock_login_status_consumer.h"
37 #include "chrome/browser/chromeos/login/screens/wizard_screen.h" 33 #include "chrome/browser/chromeos/login/screens/wizard_screen.h"
38 #include "chrome/browser/chromeos/login/user.h" 34 #include "chrome/browser/chromeos/login/user.h"
39 #include "chrome/browser/chromeos/login/user_manager.h" 35 #include "chrome/browser/chromeos/login/user_manager.h"
40 #include "chrome/browser/chromeos/login/webui_login_view.h" 36 #include "chrome/browser/chromeos/login/webui_login_view.h"
41 #include "chrome/browser/chromeos/login/wizard_controller.h" 37 #include "chrome/browser/chromeos/login/wizard_controller.h"
42 #include "chrome/browser/chromeos/policy/cloud_external_data_manager_base.h"
43 #include "chrome/browser/chromeos/policy/cloud_external_data_manager_base_test_u til.h"
44 #include "chrome/browser/chromeos/policy/device_local_account.h" 38 #include "chrome/browser/chromeos/policy/device_local_account.h"
45 #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
46 #include "chrome/browser/chromeos/policy/device_policy_builder.h" 39 #include "chrome/browser/chromeos/policy/device_policy_builder.h"
47 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" 40 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h"
48 #include "chrome/browser/extensions/extension_service.h" 41 #include "chrome/browser/extensions/extension_service.h"
49 #include "chrome/browser/extensions/extension_system.h" 42 #include "chrome/browser/extensions/extension_system.h"
50 #include "chrome/browser/lifetime/application_lifetime.h" 43 #include "chrome/browser/lifetime/application_lifetime.h"
51 #include "chrome/browser/policy/browser_policy_connector.h"
52 #include "chrome/browser/policy/cloud/cloud_policy_constants.h" 44 #include "chrome/browser/policy/cloud/cloud_policy_constants.h"
53 #include "chrome/browser/policy/cloud/cloud_policy_core.h"
54 #include "chrome/browser/policy/cloud/cloud_policy_store.h"
55 #include "chrome/browser/policy/cloud/policy_builder.h" 45 #include "chrome/browser/policy/cloud/policy_builder.h"
56 #include "chrome/browser/policy/external_data_fetcher.h"
57 #include "chrome/browser/policy/policy_map.h"
58 #include "chrome/browser/policy/policy_service.h" 46 #include "chrome/browser/policy/policy_service.h"
59 #include "chrome/browser/policy/profile_policy_connector.h"
60 #include "chrome/browser/policy/profile_policy_connector_factory.h"
61 #include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h" 47 #include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h"
62 #include "chrome/browser/policy/test/local_policy_test_server.h" 48 #include "chrome/browser/policy/test/local_policy_test_server.h"
63 #include "chrome/browser/prefs/session_startup_pref.h" 49 #include "chrome/browser/prefs/session_startup_pref.h"
64 #include "chrome/browser/profiles/profile.h" 50 #include "chrome/browser/profiles/profile.h"
65 #include "chrome/browser/profiles/profile_manager.h" 51 #include "chrome/browser/profiles/profile_manager.h"
66 #include "chrome/browser/ui/browser.h" 52 #include "chrome/browser/ui/browser.h"
67 #include "chrome/browser/ui/browser_commands.h" 53 #include "chrome/browser/ui/browser_commands.h"
68 #include "chrome/browser/ui/browser_finder.h" 54 #include "chrome/browser/ui/browser_finder.h"
69 #include "chrome/browser/ui/browser_list.h" 55 #include "chrome/browser/ui/browser_list.h"
70 #include "chrome/browser/ui/browser_window.h" 56 #include "chrome/browser/ui/browser_window.h"
71 #include "chrome/browser/ui/host_desktop.h" 57 #include "chrome/browser/ui/host_desktop.h"
72 #include "chrome/browser/ui/tabs/tab_strip_model.h" 58 #include "chrome/browser/ui/tabs/tab_strip_model.h"
73 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 59 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
74 #include "chrome/common/chrome_paths.h" 60 #include "chrome/common/chrome_paths.h"
75 #include "chrome/common/chrome_switches.h" 61 #include "chrome/common/chrome_switches.h"
76 #include "chrome/common/extensions/extension.h" 62 #include "chrome/common/extensions/extension.h"
77 #include "chromeos/chromeos_paths.h" 63 #include "chromeos/chromeos_paths.h"
78 #include "chromeos/chromeos_switches.h" 64 #include "chromeos/chromeos_switches.h"
79 #include "chromeos/dbus/cryptohome_client.h" 65 #include "chromeos/dbus/cryptohome_client.h"
80 #include "chromeos/dbus/dbus_method_call_status.h" 66 #include "chromeos/dbus/dbus_method_call_status.h"
81 #include "chromeos/dbus/fake_session_manager_client.h" 67 #include "chromeos/dbus/fake_session_manager_client.h"
82 #include "chromeos/dbus/session_manager_client.h" 68 #include "chromeos/dbus/session_manager_client.h"
83 #include "components/policy/core/common/policy_namespace.h"
84 #include "content/public/browser/notification_details.h" 69 #include "content/public/browser/notification_details.h"
85 #include "content/public/browser/notification_source.h" 70 #include "content/public/browser/notification_source.h"
86 #include "content/public/browser/web_contents.h" 71 #include "content/public/browser/web_contents.h"
87 #include "content/public/browser/web_ui.h" 72 #include "content/public/browser/web_ui.h"
88 #include "content/public/test/browser_test_utils.h" 73 #include "content/public/test/browser_test_utils.h"
89 #include "content/public/test/test_utils.h" 74 #include "content/public/test/test_utils.h"
90 #include "crypto/rsa_private_key.h" 75 #include "crypto/rsa_private_key.h"
91 #include "grit/chromium_strings.h" 76 #include "grit/chromium_strings.h"
92 #include "grit/generated_resources.h" 77 #include "grit/generated_resources.h"
93 #include "net/base/url_util.h" 78 #include "net/base/url_util.h"
94 #include "net/http/http_status_code.h" 79 #include "net/http/http_status_code.h"
95 #include "net/test/embedded_test_server/embedded_test_server.h" 80 #include "net/test/embedded_test_server/embedded_test_server.h"
96 #include "net/test/embedded_test_server/http_request.h" 81 #include "net/test/embedded_test_server/http_request.h"
97 #include "net/test/embedded_test_server/http_response.h" 82 #include "net/test/embedded_test_server/http_response.h"
98 #include "net/url_request/test_url_fetcher_factory.h"
99 #include "net/url_request/url_fetcher_delegate.h"
100 #include "policy/policy_constants.h"
101 #include "testing/gmock/include/gmock/gmock.h" 83 #include "testing/gmock/include/gmock/gmock.h"
102 #include "third_party/cros_system_api/dbus/service_constants.h" 84 #include "third_party/cros_system_api/dbus/service_constants.h"
103 #include "ui/base/l10n/l10n_util.h" 85 #include "ui/base/l10n/l10n_util.h"
104 #include "url/gurl.h" 86 #include "url/gurl.h"
105 87
106 namespace em = enterprise_management; 88 namespace em = enterprise_management;
107 89
108 using testing::InvokeWithoutArgs; 90 using testing::InvokeWithoutArgs;
109 using testing::Return; 91 using testing::Return;
110 using testing::_; 92 using testing::_;
(...skipping 22 matching lines...) Expand all
133 " </app>\n"; 115 " </app>\n";
134 const char kUpdateManifestFooter[] = 116 const char kUpdateManifestFooter[] =
135 "</gupdate>\n"; 117 "</gupdate>\n";
136 const char kHostedAppID[] = "kbmnembihfiondgfjekmnmcbddelicoi"; 118 const char kHostedAppID[] = "kbmnembihfiondgfjekmnmcbddelicoi";
137 const char kHostedAppCRXPath[] = "extensions/hosted_app.crx"; 119 const char kHostedAppCRXPath[] = "extensions/hosted_app.crx";
138 const char kHostedAppVersion[] = "1.0.0.0"; 120 const char kHostedAppVersion[] = "1.0.0.0";
139 const char kGoodExtensionID[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; 121 const char kGoodExtensionID[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf";
140 const char kGoodExtensionCRXPath[] = "extensions/good.crx"; 122 const char kGoodExtensionCRXPath[] = "extensions/good.crx";
141 const char kGoodExtensionVersion[] = "1.0"; 123 const char kGoodExtensionVersion[] = "1.0";
142 124
143 const char kExternalData[] = "External data";
144 const char kExternalDataURL[] = "http://localhost/external_data";
145
146 // Helper that serves extension update manifests to Chrome. 125 // Helper that serves extension update manifests to Chrome.
147 class TestingUpdateManifestProvider { 126 class TestingUpdateManifestProvider {
148 public: 127 public:
149 128
150 // Update manifests will be served at |relative_update_url|. 129 // Update manifests will be served at |relative_update_url|.
151 explicit TestingUpdateManifestProvider( 130 explicit TestingUpdateManifestProvider(
152 const std::string& relative_update_url); 131 const std::string& relative_update_url);
153 ~TestingUpdateManifestProvider(); 132 ~TestingUpdateManifestProvider();
154 133
155 // When an update manifest is requested for the given extension |id|, indicate 134 // When an update manifest is requested for the given extension |id|, indicate
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 extension->id() == id; 222 extension->id() == id;
244 } 223 }
245 224
246 bool DoesInstallFailureReferToId(const std::string& id, 225 bool DoesInstallFailureReferToId(const std::string& id,
247 const content::NotificationSource& source, 226 const content::NotificationSource& source,
248 const content::NotificationDetails& details) { 227 const content::NotificationDetails& details) {
249 return content::Details<const string16>(details)->find(UTF8ToUTF16(id)) != 228 return content::Details<const string16>(details)->find(UTF8ToUTF16(id)) !=
250 string16::npos; 229 string16::npos;
251 } 230 }
252 231
253 scoped_ptr<net::FakeURLFetcher> RunCallbackAndReturnFakeURLFetcher(
254 scoped_refptr<base::SequencedTaskRunner> task_runner,
255 const base::Closure& callback,
256 const GURL& url,
257 net::URLFetcherDelegate* delegate,
258 const std::string& response_data,
259 bool success) {
260 task_runner->PostTask(FROM_HERE, callback);
261 return make_scoped_ptr(new net::FakeURLFetcher(
262 url, delegate, response_data, success));
263 }
264
265 } // namespace 232 } // namespace
266 233
267 class DeviceLocalAccountTest : public DevicePolicyCrosBrowserTest { 234 class DeviceLocalAccountTest : public DevicePolicyCrosBrowserTest {
268 protected: 235 protected:
269 DeviceLocalAccountTest() 236 DeviceLocalAccountTest()
270 : user_id_1_(GenerateDeviceLocalAccountUserId( 237 : user_id_1_(GenerateDeviceLocalAccountUserId(
271 kAccountId1, DeviceLocalAccount::TYPE_PUBLIC_SESSION)), 238 kAccountId1, DeviceLocalAccount::TYPE_PUBLIC_SESSION)),
272 user_id_2_(GenerateDeviceLocalAccountUserId( 239 user_id_2_(GenerateDeviceLocalAccountUserId(
273 kAccountId2, DeviceLocalAccount::TYPE_PUBLIC_SESSION)) {} 240 kAccountId2, DeviceLocalAccount::TYPE_PUBLIC_SESSION)) {}
274 241
275 virtual ~DeviceLocalAccountTest() {} 242 virtual ~DeviceLocalAccountTest() {}
276 243
277 virtual void SetUp() OVERRIDE { 244 virtual void SetUp() OVERRIDE {
278 // Configure and start the test server. 245 // Configure and start the test server.
279 scoped_ptr<crypto::RSAPrivateKey> signing_key( 246 scoped_ptr<crypto::RSAPrivateKey> signing_key(
280 PolicyBuilder::CreateTestSigningKey()); 247 PolicyBuilder::CreateTestSigningKey());
281 ASSERT_TRUE(test_server_.SetSigningKey(signing_key.get())); 248 ASSERT_TRUE(test_server_.SetSigningKey(signing_key.get()));
282 signing_key.reset(); 249 signing_key.reset();
283 test_server_.RegisterClient(PolicyBuilder::kFakeToken, 250 test_server_.RegisterClient(PolicyBuilder::kFakeToken,
284 PolicyBuilder::kFakeDeviceId); 251 PolicyBuilder::kFakeDeviceId);
285 ASSERT_TRUE(test_server_.Start()); 252 ASSERT_TRUE(test_server_.Start());
286 253
287 ASSERT_TRUE(extension_cache_root_dir_.CreateUniqueTempDir()); 254 ASSERT_TRUE(extension_cache_root_dir_.CreateUniqueTempDir());
288 extension_cache_root_dir_override_.reset(new base::ScopedPathOverride( 255 extension_cache_root_dir_override_.reset(new base::ScopedPathOverride(
289 chromeos::DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS, 256 chromeos::DIR_DEVICE_LOCAL_ACCOUNT_CACHE,
290 extension_cache_root_dir_.path())); 257 extension_cache_root_dir_.path()));
291 ASSERT_TRUE(external_data_cache_dir_.CreateUniqueTempDir());
292 external_data_cache_dir_override_.reset(new base::ScopedPathOverride(
293 chromeos::DIR_DEVICE_LOCAL_ACCOUNT_EXTERNAL_DATA,
294 external_data_cache_dir_.path()));
295 258
296 DevicePolicyCrosBrowserTest::SetUp(); 259 DevicePolicyCrosBrowserTest::SetUp();
297 } 260 }
298 261
299 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 262 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
300 command_line->AppendSwitch(chromeos::switches::kLoginManager); 263 command_line->AppendSwitch(chromeos::switches::kLoginManager);
301 command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests); 264 command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests);
302 command_line->AppendSwitchASCII( 265 command_line->AppendSwitchASCII(
303 switches::kDeviceManagementUrl, test_server_.GetServiceURL().spec()); 266 switches::kDeviceManagementUrl, test_server_.GetServiceURL().spec());
304 command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user"); 267 command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user");
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 const std::string& id, 354 const std::string& id,
392 const std::string& version) { 355 const std::string& version) {
393 return GetCacheDirectoryForAccountID(account_id) 356 return GetCacheDirectoryForAccountID(account_id)
394 .Append(base::StringPrintf("%s-%s.crx", id.c_str(), version.c_str())); 357 .Append(base::StringPrintf("%s-%s.crx", id.c_str(), version.c_str()));
395 } 358 }
396 359
397 const std::string user_id_1_; 360 const std::string user_id_1_;
398 const std::string user_id_2_; 361 const std::string user_id_2_;
399 362
400 base::ScopedTempDir extension_cache_root_dir_; 363 base::ScopedTempDir extension_cache_root_dir_;
401 base::ScopedTempDir external_data_cache_dir_;
402 scoped_ptr<base::ScopedPathOverride> extension_cache_root_dir_override_; 364 scoped_ptr<base::ScopedPathOverride> extension_cache_root_dir_override_;
403 scoped_ptr<base::ScopedPathOverride> external_data_cache_dir_override_;
404 365
405 UserPolicyBuilder device_local_account_policy_; 366 UserPolicyBuilder device_local_account_policy_;
406 LocalPolicyTestServer test_server_; 367 LocalPolicyTestServer test_server_;
407 }; 368 };
408 369
409 static bool IsKnownUser(const std::string& account_id) { 370 static bool IsKnownUser(const std::string& account_id) {
410 return chromeos::UserManager::Get()->IsKnownUser(account_id); 371 return chromeos::UserManager::Get()->IsKnownUser(account_id);
411 } 372 }
412 373
413 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, LoginScreen) { 374 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, LoginScreen) {
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 // Verify that the extension was not installed. 762 // Verify that the extension was not installed.
802 EXPECT_FALSE(extension_service->GetExtensionById(kGoodExtensionID, true)); 763 EXPECT_FALSE(extension_service->GetExtensionById(kGoodExtensionID, true));
803 764
804 // Verify that the app is still in the account's extension cache. 765 // Verify that the app is still in the account's extension cache.
805 EXPECT_TRUE(PathExists(cached_hosted_app)); 766 EXPECT_TRUE(PathExists(cached_hosted_app));
806 767
807 // Verify that the extension was removed from the account's extension cache. 768 // Verify that the extension was removed from the account's extension cache.
808 EXPECT_FALSE(PathExists(cached_extension)); 769 EXPECT_FALSE(PathExists(cached_extension));
809 } 770 }
810 771
811 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, ExternalData) {
812 CloudExternalDataManagerBase::SetMaxExternalDataSizeForTesting(1000);
813
814 UploadAndInstallDeviceLocalAccountPolicy();
815 AddPublicSessionToDevicePolicy(kAccountId1);
816
817 // This observes the display name becoming available as this indicates
818 // device-local account policy is fully loaded.
819 content::WindowedNotificationObserver(
820 chrome::NOTIFICATION_USER_LIST_CHANGED,
821 base::Bind(&DisplayNameMatches, user_id_1_, kDisplayName)).Wait();
822
823 scoped_ptr<base::DictionaryValue> metadata =
824 test::ConstructExternalDataReference(kExternalDataURL, kExternalData);
825 DeviceLocalAccountPolicyBroker* broker =
826 g_browser_process->browser_policy_connector()->
827 GetDeviceLocalAccountPolicyService()->GetBrokerForUser(user_id_1_);
828 ASSERT_TRUE(broker);
829
830 // Start serving external data at |kExternalDataURL|.
831 scoped_ptr<base::RunLoop> run_loop(new base::RunLoop);
832 scoped_ptr<net::FakeURLFetcherFactory> fetcher_factory(
833 new net::FakeURLFetcherFactory(
834 NULL,
835 base::Bind(&RunCallbackAndReturnFakeURLFetcher,
836 base::MessageLoopProxy::current(),
837 run_loop->QuitClosure())));
838 fetcher_factory->SetFakeResponse(GURL(kExternalDataURL),
839 kExternalData,
840 true);
841
842 // TODO(bartfab): The test injects an ExternalDataFetcher for an arbitrary
843 // policy. This is only done because there are no policies that reference
844 // external data yet. Once the first such policy is added, switch the test to
845 // that policy and stop injecting a manually instantiated ExternalDataFetcher.
846 test::SetExternalDataReference(broker->core(),
847 key::kHomepageLocation,
848 make_scoped_ptr(metadata->DeepCopy()));
849
850 // The external data should be fetched and cached automatically. Wait for this
851 // fetch.
852 run_loop->Run();
853
854 // Stop serving external data at |kExternalDataURL|.
855 fetcher_factory.reset();
856
857 const PolicyMap::Entry* policy_entry =
858 broker->core()->store()->policy_map().Get(key::kHomepageLocation);
859 ASSERT_TRUE(policy_entry);
860 ASSERT_TRUE(policy_entry->external_data_fetcher);
861
862 // Retrieve the external data. Although the data is no longer being served at
863 // |kExternalDataURL|, the retrieval should succeed because the data has been
864 // cached.
865 run_loop.reset(new base::RunLoop);
866 scoped_ptr<std::string> fetched_external_data;
867 policy_entry->external_data_fetcher->Fetch(base::Bind(
868 &test::ExternalDataFetchCallback,
869 &fetched_external_data,
870 run_loop->QuitClosure()));
871 run_loop->Run();
872
873 ASSERT_TRUE(fetched_external_data);
874 EXPECT_EQ(kExternalData, *fetched_external_data);
875
876 // Wait for the login UI to be ready.
877 chromeos::LoginDisplayHostImpl* host =
878 reinterpret_cast<chromeos::LoginDisplayHostImpl*>(
879 chromeos::LoginDisplayHostImpl::default_host());
880 ASSERT_TRUE(host);
881 chromeos::OobeUI* oobe_ui = host->GetOobeUI();
882 ASSERT_TRUE(oobe_ui);
883 run_loop.reset(new base::RunLoop);
884 const bool oobe_ui_ready = oobe_ui->IsJSReady(run_loop->QuitClosure());
885 if (!oobe_ui_ready)
886 run_loop->Run();
887
888 // Ensure that the browser stays alive, even though no windows are opened
889 // during session start.
890 chrome::StartKeepAlive();
891
892 // Start login into the device-local account.
893 host->StartSignInScreen();
894 chromeos::ExistingUserController* controller =
895 chromeos::ExistingUserController::current_controller();
896 ASSERT_TRUE(controller);
897 controller->LoginAsPublicAccount(user_id_1_);
898
899 // Wait for the session to start.
900 content::WindowedNotificationObserver(chrome::NOTIFICATION_SESSION_STARTED,
901 base::Bind(IsSessionStarted)).Wait();
902
903 // Verify that the external data reference has propagated to the device-local
904 // account's ProfilePolicyConnector.
905 ProfilePolicyConnector* policy_connector =
906 ProfilePolicyConnectorFactory::GetForProfile(
907 ProfileManager::GetDefaultProfile());
908 ASSERT_TRUE(policy_connector);
909 const PolicyMap& policies = policy_connector->policy_service()->GetPolicies(
910 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()));
911 policy_entry = policies.Get(key::kHomepageLocation);
912 ASSERT_TRUE(policy_entry);
913 EXPECT_TRUE(base::Value::Equals(metadata.get(), policy_entry->value));
914 ASSERT_TRUE(policy_entry->external_data_fetcher);
915
916 // Retrieve the external data via the ProfilePolicyConnector. The retrieval
917 // should succeed because the data has been cached.
918 run_loop.reset(new base::RunLoop);
919 fetched_external_data.reset();
920 policy_entry->external_data_fetcher->Fetch(base::Bind(
921 &test::ExternalDataFetchCallback,
922 &fetched_external_data,
923 run_loop->QuitClosure()));
924 run_loop->Run();
925
926 ASSERT_TRUE(fetched_external_data);
927 EXPECT_EQ(kExternalData, *fetched_external_data);
928 }
929
930 class TermsOfServiceTest : public DeviceLocalAccountTest, 772 class TermsOfServiceTest : public DeviceLocalAccountTest,
931 public testing::WithParamInterface<bool> { 773 public testing::WithParamInterface<bool> {
932 }; 774 };
933 775
934 IN_PROC_BROWSER_TEST_P(TermsOfServiceTest, TermsOfServiceScreen) { 776 IN_PROC_BROWSER_TEST_P(TermsOfServiceTest, TermsOfServiceScreen) {
935 // Specify Terms of Service URL. 777 // Specify Terms of Service URL.
936 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 778 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
937 device_local_account_policy_.payload().mutable_termsofserviceurl()->set_value( 779 device_local_account_policy_.payload().mutable_termsofserviceurl()->set_value(
938 embedded_test_server()->GetURL( 780 embedded_test_server()->GetURL(
939 std::string("/") + 781 std::string("/") +
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 if (!IsSessionStarted()) { 923 if (!IsSessionStarted()) {
1082 content::WindowedNotificationObserver(chrome::NOTIFICATION_SESSION_STARTED, 924 content::WindowedNotificationObserver(chrome::NOTIFICATION_SESSION_STARTED,
1083 base::Bind(IsSessionStarted)).Wait(); 925 base::Bind(IsSessionStarted)).Wait();
1084 } 926 }
1085 } 927 }
1086 928
1087 INSTANTIATE_TEST_CASE_P(TermsOfServiceTestInstance, 929 INSTANTIATE_TEST_CASE_P(TermsOfServiceTestInstance,
1088 TermsOfServiceTest, testing::Bool()); 930 TermsOfServiceTest, testing::Bool());
1089 931
1090 } // namespace policy 932 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698