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

Side by Side Diff: chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc

Issue 271263002: New test cases for kiosk app crx file cache. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nit: remove a unused variable. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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 "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" 5 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/files/scoped_temp_dir.h" 9 #include "base/files/scoped_temp_dir.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/path_service.h" 11 #include "base/path_service.h"
12 #include "base/prefs/scoped_user_pref_update.h" 12 #include "base/prefs/scoped_user_pref_update.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/browser_process.h" 15 #include "chrome/browser/browser_process.h"
16 #include "chrome/browser/chromeos/app_mode/fake_cws.h"
16 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h" 17 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h"
17 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 18 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
18 #include "chrome/browser/chromeos/policy/device_local_account.h" 19 #include "chrome/browser/chromeos/policy/device_local_account.h"
19 #include "chrome/browser/chromeos/settings/cros_settings.h" 20 #include "chrome/browser/chromeos/settings/cros_settings.h"
20 #include "chrome/browser/ui/browser.h" 21 #include "chrome/browser/ui/browser.h"
21 #include "chrome/common/chrome_paths.h" 22 #include "chrome/common/chrome_paths.h"
22 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
23 #include "chrome/test/base/in_process_browser_test.h" 24 #include "chrome/test/base/in_process_browser_test.h"
24 #include "chromeos/settings/cros_settings_names.h" 25 #include "chromeos/settings/cros_settings_names.h"
25 #include "content/public/test/test_utils.h" 26 #include "content/public/test/test_utils.h"
26 #include "extensions/common/extension.h" 27 #include "extensions/common/extension.h"
27 #include "net/base/host_port_pair.h" 28 #include "net/base/host_port_pair.h"
28 #include "net/dns/mock_host_resolver.h" 29 #include "net/dns/mock_host_resolver.h"
29 #include "net/test/embedded_test_server/embedded_test_server.h" 30 #include "net/test/embedded_test_server/embedded_test_server.h"
30 31
31 namespace chromeos { 32 namespace chromeos {
32 33
33 namespace { 34 namespace {
34 35
35 const char kWebstoreDomain[] = "cws.com"; 36 // An app to test local fs data persistence across app update. V1 app writes
37 // data into local fs. V2 app reads and verifies the data.
38 // Webstore data json is in
39 // chrome/test/data/chromeos/app_mode/webstore/inlineinstall/
40 // detail/bmbpicmpniaclbbpdkfglgipkkebnbjf
41 // The version 1.0.0 installed is in
42 // chrome/test/data/chromeos/app_mode/webstore/downloads/
43 // bmbpicmpniaclbbpdkfglgipkkebnbjf.crx
44 // The version 2.0.0 crx is in
45 // chrome/test/data/chromeos/app_mode/webstore/downloads/
46 // bmbpicmpniaclbbpdkfglgipkkebnbjf_v2_read_and_verify_data.crx
47 const char kTestLocalFsKioskApp[] = "bmbpicmpniaclbbpdkfglgipkkebnbjf";
48 const char kTestLocalFsKioskAppName[] = "Kiosk App With Local Data";
36 49
37 // Helper KioskAppManager::GetConsumerKioskAutoLaunchStatusCallback 50 // Helper KioskAppManager::GetConsumerKioskAutoLaunchStatusCallback
38 // implementation. 51 // implementation.
39 void ConsumerKioskAutoLaunchStatusCheck( 52 void ConsumerKioskAutoLaunchStatusCheck(
40 KioskAppManager::ConsumerKioskAutoLaunchStatus* out_status, 53 KioskAppManager::ConsumerKioskAutoLaunchStatus* out_status,
41 const base::Closure& runner_quit_task, 54 const base::Closure& runner_quit_task,
42 KioskAppManager::ConsumerKioskAutoLaunchStatus in_status) { 55 KioskAppManager::ConsumerKioskAutoLaunchStatus in_status) {
43 LOG(INFO) << "ConsumerKioskAutoLaunchStatus = " << in_status; 56 LOG(INFO) << "ConsumerKioskAutoLaunchStatus = " << in_status;
44 *out_status = in_status; 57 *out_status = in_status;
45 runner_quit_task.Run(); 58 runner_quit_task.Run();
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 130
118 KioskAppManager* manager_; 131 KioskAppManager* manager_;
119 int data_changed_count_; 132 int data_changed_count_;
120 int load_failure_count_; 133 int load_failure_count_;
121 134
122 DISALLOW_COPY_AND_ASSIGN(TestKioskAppManagerObserver); 135 DISALLOW_COPY_AND_ASSIGN(TestKioskAppManagerObserver);
123 }; 136 };
124 137
125 class AppDataLoadWaiter : public KioskAppManagerObserver { 138 class AppDataLoadWaiter : public KioskAppManagerObserver {
126 public: 139 public:
127 explicit AppDataLoadWaiter(KioskAppManager* manager) 140 AppDataLoadWaiter(KioskAppManager* manager, int data_loaded_threshold)
128 : manager_(manager), 141 : runner_(NULL),
129 loaded_(false) { 142 manager_(manager),
143 loaded_(false),
144 quit_(false),
145 data_change_count_(0),
146 data_loaded_threshold_(data_loaded_threshold) {
147 manager_->AddObserver(this);
130 } 148 }
131 149
132 virtual ~AppDataLoadWaiter() { 150 virtual ~AppDataLoadWaiter() { manager_->RemoveObserver(this); }
133 }
134 151
135 void Wait() { 152 void Wait() {
136 manager_->AddObserver(this); 153 if (quit_)
xiyuan 2014/05/13 16:43:35 Can we use |loaded_| and get rid of |quit_|?
jennyz 2014/05/13 18:36:11 In OnKioskAppDataLoadFailure case, loaded will be
154 return;
137 runner_ = new content::MessageLoopRunner; 155 runner_ = new content::MessageLoopRunner;
138 runner_->Run(); 156 runner_->Run();
139 manager_->RemoveObserver(this);
140 } 157 }
141 158
142 bool loaded() const { return loaded_; } 159 bool loaded() const { return loaded_; }
143 160
144 private: 161 private:
145 // KioskAppManagerObserver overrides: 162 // KioskAppManagerObserver overrides:
146 virtual void OnKioskAppDataChanged(const std::string& app_id) OVERRIDE { 163 virtual void OnKioskAppDataChanged(const std::string& app_id) OVERRIDE {
164 ++data_change_count_;
165 if (data_change_count_ < data_loaded_threshold_)
166 return;
147 loaded_ = true; 167 loaded_ = true;
148 runner_->Quit(); 168 quit_ = true;
169 if (runner_)
170 runner_->Quit();
149 } 171 }
150 172
151 virtual void OnKioskAppDataLoadFailure(const std::string& app_id) OVERRIDE { 173 virtual void OnKioskAppDataLoadFailure(const std::string& app_id) OVERRIDE {
152 loaded_ = false; 174 loaded_ = false;
153 runner_->Quit(); 175 quit_ = true;
176 if (runner_)
177 runner_->Quit();
154 } 178 }
155 179
156 scoped_refptr<content::MessageLoopRunner> runner_; 180 scoped_refptr<content::MessageLoopRunner> runner_;
157 KioskAppManager* manager_; 181 KioskAppManager* manager_;
158 bool loaded_; 182 bool loaded_;
183 bool quit_;
184 int data_change_count_;
185 int data_loaded_threshold_;
159 186
160 DISALLOW_COPY_AND_ASSIGN(AppDataLoadWaiter); 187 DISALLOW_COPY_AND_ASSIGN(AppDataLoadWaiter);
161 }; 188 };
162 189
163 } // namespace 190 } // namespace
164 191
165 class KioskAppManagerTest : public InProcessBrowserTest { 192 class KioskAppManagerTest : public InProcessBrowserTest {
166 public: 193 public:
167 KioskAppManagerTest() {} 194 KioskAppManagerTest() : fake_cws_(new FakeCWS()) {}
168 virtual ~KioskAppManagerTest() {} 195 virtual ~KioskAppManagerTest() {}
169 196
170 // InProcessBrowserTest overrides: 197 // InProcessBrowserTest overrides:
171 virtual void SetUp() OVERRIDE { 198 virtual void SetUp() OVERRIDE {
172 base::FilePath test_data_dir; 199 base::FilePath test_data_dir;
173 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); 200 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
174 base::FilePath webstore_dir = 201 embedded_test_server()->ServeFilesFromDirectory(test_data_dir);
175 test_data_dir.Append(FILE_PATH_LITERAL("chromeos/app_mode/"));
176 embedded_test_server()->ServeFilesFromDirectory(webstore_dir);
177 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 202 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
178 // Stop IO thread here because no threads are allowed while 203 // Stop IO thread here because no threads are allowed while
179 // spawning sandbox host process. See crbug.com/322732. 204 // spawning sandbox host process. See crbug.com/322732.
180 embedded_test_server()->StopThread(); 205 embedded_test_server()->StopThread();
181 206
182 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 207 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
183 208
184 InProcessBrowserTest::SetUp(); 209 InProcessBrowserTest::SetUp();
185 } 210 }
186 211
187 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 212 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
188 InProcessBrowserTest::SetUpCommandLine(command_line); 213 InProcessBrowserTest::SetUpCommandLine(command_line);
189 214
190 // Get fake webstore gallery URL. At the end, it should look something like 215 // Initialize fake_cws_ to setup web store gallery.
191 // http://cws.com:<test_server_port>/webstore. 216 fake_cws_->Init(embedded_test_server(), true); // Set up gallery url only.
192 const GURL& server_url = embedded_test_server()->base_url();
193 std::string google_host(kWebstoreDomain);
194 GURL::Replacements replace_google_host;
195 replace_google_host.SetHostStr(google_host);
196 GURL google_url = server_url.ReplaceComponents(replace_google_host);
197 GURL fake_store_url = google_url.Resolve("/webstore");
198 command_line->AppendSwitchASCII(switches::kAppsGalleryURL,
199 fake_store_url.spec());
200 } 217 }
201 218
202 virtual void SetUpOnMainThread() OVERRIDE { 219 virtual void SetUpOnMainThread() OVERRIDE {
203 InProcessBrowserTest::SetUpOnMainThread(); 220 InProcessBrowserTest::SetUpOnMainThread();
204 221
205 // Restart the thread as the sandbox host process has already been spawned. 222 // Restart the thread as the sandbox host process has already been spawned.
206 embedded_test_server()->RestartThreadAndListen(); 223 embedded_test_server()->RestartThreadAndListen();
207 } 224 }
208 225
209 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 226 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
210 InProcessBrowserTest::SetUpInProcessBrowserTestFixture(); 227 InProcessBrowserTest::SetUpInProcessBrowserTestFixture();
211 228
212 host_resolver()->AddRule(kWebstoreDomain, "127.0.0.1"); 229 host_resolver()->AddRule(fake_cws_->GetWebStoreDomain(), "127.0.0.1");
xiyuan 2014/05/13 16:43:35 We can just map "*" to 127.0.0.1. No need to just
jennyz 2014/05/13 18:36:11 Done.
213 } 230 }
214 231
215 std::string GetAppIds() const { 232 std::string GetAppIds() const {
216 KioskAppManager::Apps apps; 233 KioskAppManager::Apps apps;
217 manager()->GetApps(&apps); 234 manager()->GetApps(&apps);
218 235
219 std::string str; 236 std::string str;
220 for (size_t i = 0; i < apps.size(); ++i) { 237 for (size_t i = 0; i < apps.size(); ++i) {
221 if (i > 0) 238 if (i > 0)
222 str += ','; 239 str += ',';
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 kAccountsPrefDeviceLocalAccountsKeyType, 293 kAccountsPrefDeviceLocalAccountsKeyType,
277 policy::DeviceLocalAccount::TYPE_KIOSK_APP); 294 policy::DeviceLocalAccount::TYPE_KIOSK_APP);
278 entry->SetStringWithoutPathExpansion( 295 entry->SetStringWithoutPathExpansion(
279 kAccountsPrefDeviceLocalAccountsKeyKioskAppId, 296 kAccountsPrefDeviceLocalAccountsKeyKioskAppId,
280 app_id); 297 app_id);
281 device_local_accounts.Append(entry.release()); 298 device_local_accounts.Append(entry.release());
282 CrosSettings::Get()->Set(kAccountsPrefDeviceLocalAccounts, 299 CrosSettings::Get()->Set(kAccountsPrefDeviceLocalAccounts,
283 device_local_accounts); 300 device_local_accounts);
284 } 301 }
285 302
303 bool GetCachedCrx(const std::string& app_id,
304 base::FilePath* file_path,
305 std::string* version) {
306 return manager()->GetCachedCrx(app_id, file_path, version);
307 }
308
309 void UpdateAppData() { manager()->UpdateAppData(); }
310
311 void RunAddNewAppTest(const std::string& id,
312 const std::string& version,
313 const std::string& app_name) {
314 fake_cws_->SetupCrxDownloadAndUpdateUrls(embedded_test_server());
315 std::string crx_file_name = id + ".crx";
316 fake_cws_->SetUpdateCrx(id, crx_file_name, version);
317
318 AppDataLoadWaiter waiter(manager(), 3);
319 manager()->AddApp(id);
320 waiter.Wait();
321 EXPECT_TRUE(waiter.loaded());
322
323 // Check CRX file is cached.
324 base::FilePath crx_path;
325 std::string crx_version;
326 EXPECT_TRUE(GetCachedCrx(id, &crx_path, &crx_version));
327 EXPECT_TRUE(base::PathExists(crx_path));
328 EXPECT_EQ(version, crx_version);
329 // Verify the original crx file is identical to the cached file.
330 base::FilePath test_data_dir;
331 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
332 std::string src_file_path_str =
333 std::string("chromeos/app_mode/webstore/downloads/") + crx_file_name;
334 base::FilePath src_file_path = test_data_dir.Append(src_file_path_str);
335 EXPECT_TRUE(base::PathExists(src_file_path));
336 EXPECT_TRUE(base::ContentsEqual(src_file_path, crx_path));
337
338 // Check manifest data is cached correctly.
339 KioskAppManager::Apps apps;
340 manager()->GetApps(&apps);
341 ASSERT_EQ(1u, apps.size());
342 EXPECT_EQ(id, apps[0].app_id);
343 EXPECT_EQ(app_name, apps[0].name);
344 EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size());
345
346 // Check data is cached in local state.
347 PrefService* local_state = g_browser_process->local_state();
348 const base::DictionaryValue* dict =
349 local_state->GetDictionary(KioskAppManager::kKioskDictionaryName);
350
351 std::string name;
352 std::string name_key = "apps." + id + ".name";
353 EXPECT_TRUE(dict->GetString(name_key, &name));
354 EXPECT_EQ(apps[0].name, name);
355
356 std::string icon_path_string;
357 std::string icon_path_key = "apps." + id + ".icon";
358 EXPECT_TRUE(dict->GetString(icon_path_key, &icon_path_string));
359
360 base::FilePath expected_icon_path;
361 ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &expected_icon_path));
362 expected_icon_path =
363 expected_icon_path.AppendASCII(KioskAppManager::kIconCacheDir)
364 .AppendASCII(apps[0].app_id)
365 .AddExtension(".png");
366 EXPECT_EQ(expected_icon_path.value(), icon_path_string);
367 }
368
286 KioskAppManager* manager() const { return KioskAppManager::Get(); } 369 KioskAppManager* manager() const { return KioskAppManager::Get(); }
370 FakeCWS* fake_cws() { return fake_cws_.get(); }
287 371
288 private: 372 private:
289 base::ScopedTempDir temp_dir_; 373 base::ScopedTempDir temp_dir_;
374 scoped_ptr<FakeCWS> fake_cws_;
290 375
291 DISALLOW_COPY_AND_ASSIGN(KioskAppManagerTest); 376 DISALLOW_COPY_AND_ASSIGN(KioskAppManagerTest);
292 }; 377 };
293 378
294 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, Basic) { 379 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, Basic) {
295 // Add a couple of apps. Use "fake_app_x" that do not have data on the test 380 // Add a couple of apps. Use "fake_app_x" that do not have data on the test
296 // server to avoid pending data loads that could be lingering on tear down and 381 // server to avoid pending data loads that could be lingering on tear down and
297 // cause DCHECK failure in utility_process_host_impl.cc. 382 // cause DCHECK failure in utility_process_host_impl.cc.
298 manager()->AddApp("fake_app_1"); 383 manager()->AddApp("fake_app_1");
299 manager()->AddApp("fake_app_2"); 384 manager()->AddApp("fake_app_2");
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 EXPECT_FALSE(manager()->IsAutoLaunchEnabled()); 420 EXPECT_FALSE(manager()->IsAutoLaunchEnabled());
336 421
337 // Add an existing app again. 422 // Add an existing app again.
338 manager()->AddApp("fake_app_1"); 423 manager()->AddApp("fake_app_1");
339 EXPECT_EQ("fake_app_1", GetAppIds()); 424 EXPECT_EQ("fake_app_1", GetAppIds());
340 } 425 }
341 426
342 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, LoadCached) { 427 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, LoadCached) {
343 SetExistingApp("app_1", "Cached App1 Name", "red16x16.png"); 428 SetExistingApp("app_1", "Cached App1 Name", "red16x16.png");
344 429
345 AppDataLoadWaiter waiter(manager()); 430 AppDataLoadWaiter waiter(manager(), 1);
346 waiter.Wait(); 431 waiter.Wait();
347 EXPECT_TRUE(waiter.loaded()); 432 EXPECT_TRUE(waiter.loaded());
348 433
349 KioskAppManager::Apps apps; 434 KioskAppManager::Apps apps;
350 manager()->GetApps(&apps); 435 manager()->GetApps(&apps);
351 EXPECT_EQ(1u, apps.size()); 436 EXPECT_EQ(1u, apps.size());
352 EXPECT_EQ("app_1", apps[0].app_id); 437 EXPECT_EQ("app_1", apps[0].app_id);
353 EXPECT_EQ("Cached App1 Name", apps[0].name); 438 EXPECT_EQ("Cached App1 Name", apps[0].name);
354 EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size()); 439 EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size());
355 } 440 }
356 441
357 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, ClearAppData) { 442 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, ClearAppData) {
358 SetExistingApp("app_1", "Cached App1 Name", "red16x16.png"); 443 SetExistingApp("app_1", "Cached App1 Name", "red16x16.png");
359 444
360 PrefService* local_state = g_browser_process->local_state(); 445 PrefService* local_state = g_browser_process->local_state();
361 const base::DictionaryValue* dict = 446 const base::DictionaryValue* dict =
362 local_state->GetDictionary(KioskAppManager::kKioskDictionaryName); 447 local_state->GetDictionary(KioskAppManager::kKioskDictionaryName);
363 const base::DictionaryValue* apps_dict; 448 const base::DictionaryValue* apps_dict;
364 EXPECT_TRUE(dict->GetDictionary(KioskAppManager::kKeyApps, &apps_dict)); 449 EXPECT_TRUE(dict->GetDictionary(KioskAppManager::kKeyApps, &apps_dict));
365 EXPECT_TRUE(apps_dict->HasKey("app_1")); 450 EXPECT_TRUE(apps_dict->HasKey("app_1"));
366 451
367 manager()->ClearAppData("app_1"); 452 manager()->ClearAppData("app_1");
368 453
369 EXPECT_FALSE(apps_dict->HasKey("app_1")); 454 EXPECT_FALSE(apps_dict->HasKey("app_1"));
370 } 455 }
371 456
372 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateAppDataFromProfile) { 457 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateAppDataFromProfile) {
373 SetExistingApp("app_1", "Cached App1 Name", "red16x16.png"); 458 SetExistingApp("app_1", "Cached App1 Name", "red16x16.png");
374 459
375 AppDataLoadWaiter waiter(manager()); 460 AppDataLoadWaiter waiter(manager(), 1);
376 waiter.Wait(); 461 waiter.Wait();
377 EXPECT_TRUE(waiter.loaded()); 462 EXPECT_TRUE(waiter.loaded());
378 463
379 KioskAppManager::Apps apps; 464 KioskAppManager::Apps apps;
380 manager()->GetApps(&apps); 465 manager()->GetApps(&apps);
381 EXPECT_EQ(1u, apps.size()); 466 EXPECT_EQ(1u, apps.size());
382 EXPECT_EQ("app_1", apps[0].app_id); 467 EXPECT_EQ("app_1", apps[0].app_id);
383 EXPECT_EQ("Cached App1 Name", apps[0].name); 468 EXPECT_EQ("Cached App1 Name", apps[0].name);
384 469
385 scoped_refptr<extensions::Extension> updated_app = 470 scoped_refptr<extensions::Extension> updated_app =
386 MakeApp("Updated App1 Name", "2.0", "http://localhost/", "app_1"); 471 MakeApp("Updated App1 Name", "2.0", "http://localhost/", "app_1");
387 manager()->UpdateAppDataFromProfile( 472 manager()->UpdateAppDataFromProfile(
388 "app_1", browser()->profile(), updated_app.get()); 473 "app_1", browser()->profile(), updated_app.get());
389 474
390 waiter.Wait(); 475 waiter.Wait();
391 EXPECT_TRUE(waiter.loaded()); 476 EXPECT_TRUE(waiter.loaded());
392 477
393 manager()->GetApps(&apps); 478 manager()->GetApps(&apps);
394 EXPECT_EQ(1u, apps.size()); 479 EXPECT_EQ(1u, apps.size());
395 EXPECT_EQ("app_1", apps[0].app_id); 480 EXPECT_EQ("app_1", apps[0].app_id);
396 EXPECT_EQ("Updated App1 Name", apps[0].name); 481 EXPECT_EQ("Updated App1 Name", apps[0].name);
397 } 482 }
398 483
399 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, BadApp) { 484 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, BadApp) {
400 manager()->AddApp("unknown_app"); 485 manager()->AddApp("unknown_app");
401 486
402 TestKioskAppManagerObserver observer(manager()); 487 TestKioskAppManagerObserver observer(manager());
403 488
404 AppDataLoadWaiter waiter(manager()); 489 AppDataLoadWaiter waiter(manager(), 1);
405 waiter.Wait(); 490 waiter.Wait();
406 EXPECT_FALSE(waiter.loaded()); 491 EXPECT_FALSE(waiter.loaded());
407 492
408 EXPECT_EQ("", GetAppIds()); 493 EXPECT_EQ("", GetAppIds());
409 EXPECT_EQ(1, observer.load_failure_count()); 494 EXPECT_EQ(1, observer.load_failure_count());
410 } 495 }
411 496
412 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, GoodApp) { 497 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, GoodApp) {
413 // Webstore data json is in 498 // Webstore data json is in
414 // chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_1 499 // chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_1
415 manager()->AddApp("app_1"); 500 manager()->AddApp("app_1");
416 501
417 AppDataLoadWaiter waiter(manager()); 502 AppDataLoadWaiter waiter(manager(), 1);
418 waiter.Wait(); 503 waiter.Wait();
419 EXPECT_TRUE(waiter.loaded()); 504 EXPECT_TRUE(waiter.loaded());
420 505
421 // Check data is correct. 506 // Check data is correct.
422 KioskAppManager::Apps apps; 507 KioskAppManager::Apps apps;
423 manager()->GetApps(&apps); 508 manager()->GetApps(&apps);
424 ASSERT_EQ(1u, apps.size()); 509 ASSERT_EQ(1u, apps.size());
425 EXPECT_EQ("app_1", apps[0].app_id); 510 EXPECT_EQ("app_1", apps[0].app_id);
426 EXPECT_EQ("Name of App 1", apps[0].name); 511 EXPECT_EQ("Name of App 1", apps[0].name);
427 EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size()); 512 EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size());
(...skipping 11 matching lines...) Expand all
439 EXPECT_TRUE(dict->GetString("apps.app_1.icon", &icon_path_string)); 524 EXPECT_TRUE(dict->GetString("apps.app_1.icon", &icon_path_string));
440 525
441 base::FilePath expected_icon_path; 526 base::FilePath expected_icon_path;
442 ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &expected_icon_path)); 527 ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &expected_icon_path));
443 expected_icon_path = expected_icon_path. 528 expected_icon_path = expected_icon_path.
444 AppendASCII(KioskAppManager::kIconCacheDir). 529 AppendASCII(KioskAppManager::kIconCacheDir).
445 AppendASCII(apps[0].app_id).AddExtension(".png"); 530 AppendASCII(apps[0].app_id).AddExtension(".png");
446 EXPECT_EQ(expected_icon_path.value(), icon_path_string); 531 EXPECT_EQ(expected_icon_path.value(), icon_path_string);
447 } 532 }
448 533
534 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, DownloadNewApp) {
535 base::FilePath crx_path;
536 RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName);
537 }
538
539 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, RemoveApp) {
540 // Add a new app.
541 RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName);
542 KioskAppManager::Apps apps;
543 manager()->GetApps(&apps);
544 ASSERT_EQ(1u, apps.size());
545 base::FilePath crx_path;
546 std::string version;
547 EXPECT_TRUE(GetCachedCrx(kTestLocalFsKioskApp, &crx_path, &version));
548 EXPECT_TRUE(base::PathExists(crx_path));
549 EXPECT_EQ("1.0.0", version);
550
551 // Remove the app now.
552 manager()->RemoveApp(kTestLocalFsKioskApp);
553 manager()->GetApps(&apps);
554 ASSERT_EQ(0u, apps.size());
555 EXPECT_FALSE(base::PathExists(crx_path));
556 EXPECT_FALSE(GetCachedCrx(kTestLocalFsKioskApp, &crx_path, &version));
557 }
558
559 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateApp) {
560 // Add a version 1 app first.
561 RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName);
562 KioskAppManager::Apps apps;
563 manager()->GetApps(&apps);
564 ASSERT_EQ(1u, apps.size());
565 base::FilePath crx_path;
566 std::string version;
567 EXPECT_TRUE(GetCachedCrx(kTestLocalFsKioskApp, &crx_path, &version));
568 EXPECT_TRUE(base::PathExists(crx_path));
569 EXPECT_EQ("1.0.0", version);
570
571 // Update to version 2.
572 fake_cws()->SetUpdateCrx(
573 kTestLocalFsKioskApp,
574 "bmbpicmpniaclbbpdkfglgipkkebnbjf_v2_read_and_verify_data.crx",
575 "2.0.0");
576 AppDataLoadWaiter waiter(manager(), 1);
577 UpdateAppData();
578 waiter.Wait();
579 EXPECT_TRUE(waiter.loaded());
580
581 // Verify the app has been updated to v2.
582 manager()->GetApps(&apps);
583 ASSERT_EQ(1u, apps.size());
584 base::FilePath new_crx_path;
585 std::string new_version;
586 EXPECT_TRUE(GetCachedCrx(kTestLocalFsKioskApp, &new_crx_path, &new_version));
587 EXPECT_EQ("2.0.0", new_version);
588 EXPECT_TRUE(base::PathExists(new_crx_path));
589 // Get original version 2 source download crx file path.
590 base::FilePath test_data_dir;
591 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
592 base::FilePath v2_file_path = test_data_dir.Append(FILE_PATH_LITERAL(
593 "chromeos/app_mode/webstore/downloads/"
594 "bmbpicmpniaclbbpdkfglgipkkebnbjf_v2_read_and_verify_data.crx"));
595 EXPECT_TRUE(base::PathExists(v2_file_path));
596 EXPECT_TRUE(base::ContentsEqual(v2_file_path, new_crx_path));
597 }
598
449 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, EnableConsumerKiosk) { 599 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, EnableConsumerKiosk) {
450 scoped_ptr<KioskAppManager::ConsumerKioskAutoLaunchStatus> status( 600 scoped_ptr<KioskAppManager::ConsumerKioskAutoLaunchStatus> status(
451 new KioskAppManager::ConsumerKioskAutoLaunchStatus( 601 new KioskAppManager::ConsumerKioskAutoLaunchStatus(
452 KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_DISABLED)); 602 KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_DISABLED));
453 scoped_ptr<bool> locked(new bool(false)); 603 scoped_ptr<bool> locked(new bool(false));
454 604
455 scoped_refptr<content::MessageLoopRunner> runner = 605 scoped_refptr<content::MessageLoopRunner> runner =
456 new content::MessageLoopRunner; 606 new content::MessageLoopRunner;
457 manager()->GetConsumerKioskAutoLaunchStatus( 607 manager()->GetConsumerKioskAutoLaunchStatus(
458 base::Bind(&ConsumerKioskAutoLaunchStatusCheck, 608 base::Bind(&ConsumerKioskAutoLaunchStatusCheck,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 manager()->GetConsumerKioskAutoLaunchStatus( 667 manager()->GetConsumerKioskAutoLaunchStatus(
518 base::Bind(&ConsumerKioskAutoLaunchStatusCheck, 668 base::Bind(&ConsumerKioskAutoLaunchStatusCheck,
519 status.get(), 669 status.get(),
520 runner3->QuitClosure())); 670 runner3->QuitClosure()));
521 runner3->Run(); 671 runner3->Run();
522 EXPECT_EQ(*status.get(), 672 EXPECT_EQ(*status.get(),
523 KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_DISABLED); 673 KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_DISABLED);
524 } 674 }
525 675
526 } // namespace chromeos 676 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698