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

Side by Side Diff: chrome/browser/ui/ash/launcher/browser_launcher_item_controller_unittest.cc

Issue 22887015: Remove PerBrowser launcher (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix nit Created 7 years, 4 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
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/ash/launcher/browser_launcher_item_controller.h"
6
7 #include <map>
8 #include <string>
9
10 #include "ash/ash_switches.h"
11 #include "ash/launcher/launcher_model.h"
12 #include "base/command_line.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "chrome/browser/favicon/favicon_tab_helper.h"
15 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
16 #include "chrome/browser/ui/ash/launcher/launcher_item_controller.h"
17 #include "chrome/browser/ui/tabs/tab_strip_model.h"
18 #include "chrome/browser/ui/tabs/test_tab_strip_model_delegate.h"
19 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
20 #include "chrome/test/base/testing_profile.h"
21 #include "content/public/browser/web_contents.h"
22 #include "testing/gtest/include/gtest/gtest.h"
23 #include "third_party/skia/include/core/SkBitmap.h"
24 #include "ui/aura/client/activation_change_observer.h"
25 #include "ui/aura/client/activation_delegate.h"
26 #include "ui/aura/client/aura_constants.h"
27 #include "ui/aura/root_window.h"
28 #include "ui/aura/test/test_activation_client.h"
29 #include "ui/aura/test/test_window_delegate.h"
30 #include "ui/aura/window.h"
31 #include "ui/aura/window_delegate.h"
32 #include "ui/base/events/event.h"
33
34 // TODO(skuhne): Remove this module together with the
35 // browser_launcher_item_controller.* when the old launcher goes away.
36
37 namespace {
38
39 // Test implementation of AppTabHelper.
40 class AppTabHelperImpl : public ChromeLauncherController::AppTabHelper {
41 public:
42 AppTabHelperImpl() {}
43 virtual ~AppTabHelperImpl() {}
44
45 // Sets the id for the specified tab. The id is removed if Remove() is
46 // invoked.
47 void SetAppID(content::WebContents* tab, const std::string& id) {
48 tab_id_map_[tab] = id;
49 }
50
51 // Returns true if there is an id registered for |tab|.
52 bool HasAppID(content::WebContents* tab) const {
53 return tab_id_map_.find(tab) != tab_id_map_.end();
54 }
55
56 // AppTabHelper implementation:
57 virtual std::string GetAppID(content::WebContents* tab) OVERRIDE {
58 return tab_id_map_.find(tab) != tab_id_map_.end() ? tab_id_map_[tab] :
59 std::string();
60 }
61
62 virtual bool IsValidID(const std::string& id) OVERRIDE {
63 for (TabToStringMap::const_iterator i = tab_id_map_.begin();
64 i != tab_id_map_.end(); ++i) {
65 if (i->second == id)
66 return true;
67 }
68 return false;
69 }
70
71 private:
72 typedef std::map<content::WebContents*, std::string> TabToStringMap;
73
74 TabToStringMap tab_id_map_;
75
76 DISALLOW_COPY_AND_ASSIGN(AppTabHelperImpl);
77 };
78
79 // Test implementation of AppIconLoader.
80 class AppIconLoaderImpl : public extensions::AppIconLoader {
81 public:
82 AppIconLoaderImpl() : fetch_count_(0) {}
83 virtual ~AppIconLoaderImpl() {}
84
85 // Returns the number of times FetchImage() has been invoked and resets the
86 // count to 0.
87 int GetAndClearFetchCount() {
88 int value = fetch_count_;
89 fetch_count_ = 0;
90 return value;
91 }
92
93 // AppIconLoader implementation:
94 virtual void FetchImage(const std::string& id) OVERRIDE {
95 fetch_count_++;
96 }
97 virtual void ClearImage(const std::string& id) OVERRIDE {
98 }
99 virtual void UpdateImage(const std::string& id) OVERRIDE {
100 }
101
102 private:
103 int fetch_count_;
104
105 DISALLOW_COPY_AND_ASSIGN(AppIconLoaderImpl);
106 };
107
108 // Test implementation of TabStripModelDelegate.
109 class TabHelperTabStripModelDelegate : public TestTabStripModelDelegate {
110 public:
111 TabHelperTabStripModelDelegate() {}
112 virtual ~TabHelperTabStripModelDelegate() {}
113
114 virtual void WillAddWebContents(content::WebContents* contents) OVERRIDE {
115 // BrowserLauncherItemController assumes that all WebContents passed to it
116 // have attached an extensions::TabHelper and a FaviconTabHelper. The
117 // TestTabStripModelDelegate adds an extensions::TabHelper.
118 TestTabStripModelDelegate::WillAddWebContents(contents);
119 FaviconTabHelper::CreateForWebContents(contents);
120 }
121
122 private:
123 DISALLOW_COPY_AND_ASSIGN(TabHelperTabStripModelDelegate);
124 };
125
126 } // namespace
127
128 // TODO(skuhne): Several of these unit tests need to be moved into a new home
129 // when the old launcher & the browser launcher item controller are removed
130 // (several of these tests are not testing the BrowserLauncherItemController -
131 // but the LauncherController framework).
132 class LauncherItemControllerPerAppTest
133 : public ChromeRenderViewHostTestHarness {
134 public:
135 virtual void SetUp() OVERRIDE {
136 ChromeRenderViewHostTestHarness::SetUp();
137
138 activation_client_.reset(
139 new aura::test::TestActivationClient(root_window()));
140 launcher_model_.reset(new ash::LauncherModel);
141 launcher_delegate_.reset(
142 ChromeLauncherController::CreateInstance(profile(),
143 launcher_model_.get()));
144 app_tab_helper_ = new AppTabHelperImpl;
145 app_icon_loader_ = new AppIconLoaderImpl;
146 launcher_delegate_->SetAppTabHelperForTest(app_tab_helper_);
147 launcher_delegate_->SetAppIconLoaderForTest(app_icon_loader_);
148 launcher_delegate_->Init();
149 }
150
151 virtual void TearDown() OVERRIDE {
152 launcher_delegate_.reset();
153 ChromeRenderViewHostTestHarness::TearDown();
154 }
155
156 protected:
157 // Contains all the objects needed to create a BrowserLauncherItemController.
158 struct State : public aura::client::ActivationDelegate,
159 public aura::client::ActivationChangeObserver {
160 public:
161 State(LauncherItemControllerPerAppTest* test,
162 const std::string& app_id,
163 BrowserLauncherItemController::Type launcher_type)
164 : launcher_test(test),
165 window(NULL),
166 tab_strip(&tab_strip_delegate, test->profile()),
167 updater(launcher_type,
168 &window,
169 &tab_strip,
170 test->launcher_delegate_.get(),
171 app_id) {
172 window.Init(ui::LAYER_NOT_DRAWN);
173 launcher_test->root_window()->AddChild(&window);
174 launcher_test->activation_client_->ActivateWindow(&window);
175 aura::client::SetActivationDelegate(&window, this);
176 aura::client::SetActivationChangeObserver(&window, this);
177 updater.Init();
178 }
179
180 ash::LauncherItem GetUpdaterItem() {
181 ash::LauncherID launcher_id =
182 BrowserLauncherItemController::TestApi(&updater).item_id();
183 int index = launcher_test->launcher_model_->ItemIndexByID(launcher_id);
184 return launcher_test->launcher_model_->items()[index];
185 }
186
187 // aura::client::ActivationDelegate overrides.
188 virtual bool ShouldActivate() const OVERRIDE {
189 return true;
190 }
191
192 // aura::client::ActivationChangeObserver overrides:
193 virtual void OnWindowActivated(aura::Window* gained_active,
194 aura::Window* lost_active) OVERRIDE {
195 DCHECK(&window == gained_active || &window == lost_active);
196 updater.BrowserActivationStateChanged();
197 }
198
199 LauncherItemControllerPerAppTest* launcher_test;
200 aura::Window window;
201 TabHelperTabStripModelDelegate tab_strip_delegate;
202 TabStripModel tab_strip;
203 BrowserLauncherItemController updater;
204
205 private:
206 DISALLOW_COPY_AND_ASSIGN(State);
207 };
208
209 const std::string& GetAppID(ash::LauncherID id) const {
210 return launcher_delegate_->GetAppIdFromLauncherIdForTest(id);
211 }
212
213 void ResetAppTabHelper() {
214 launcher_delegate_->SetAppTabHelperForTest(app_tab_helper_);
215 }
216
217 void ResetAppIconLoader() {
218 launcher_delegate_->SetAppIconLoaderForTest(app_icon_loader_);
219 }
220
221 void UnpinAppsWithID(const std::string& app_id) {
222 launcher_delegate_->UnpinAppsWithID(app_id);
223 }
224
225 const ash::LauncherItem& GetItem(BrowserLauncherItemController* updater) {
226 int index = launcher_model_->ItemIndexByID(
227 BrowserLauncherItemController::TestApi(updater).item_id());
228 return launcher_model_->items()[index];
229 }
230
231 scoped_ptr<ash::LauncherModel> launcher_model_;
232 scoped_ptr<ChromeLauncherController> launcher_delegate_;
233
234 // Owned by BrowserLauncherItemController.
235 AppTabHelperImpl* app_tab_helper_;
236 AppIconLoaderImpl* app_icon_loader_;
237
238 scoped_ptr<aura::test::TestActivationClient> activation_client_;
239 };
240
241 // Verify that the launcher item positions are persisted and restored.
242 TEST_F(LauncherItemControllerPerAppTest, PersistLauncherItemPositions) {
243 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
244 launcher_model_->items()[0].type);
245 EXPECT_EQ(ash::TYPE_APP_LIST,
246 launcher_model_->items()[1].type);
247 scoped_ptr<content::WebContents> tab1(CreateTestWebContents());
248 scoped_ptr<content::WebContents> tab2(CreateTestWebContents());
249 app_tab_helper_->SetAppID(tab1.get(), "1");
250 app_tab_helper_->SetAppID(tab1.get(), "2");
251
252 EXPECT_FALSE(launcher_delegate_->IsAppPinned("1"));
253 launcher_delegate_->PinAppWithID("1");
254 EXPECT_TRUE(launcher_delegate_->IsAppPinned("1"));
255 launcher_delegate_->PinAppWithID("2");
256
257 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
258 launcher_model_->items()[0].type);
259 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
260 launcher_model_->items()[1].type);
261 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
262 launcher_model_->items()[2].type);
263 EXPECT_EQ(ash::TYPE_APP_LIST,
264 launcher_model_->items()[3].type);
265
266 launcher_model_->Move(0, 2);
267 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
268 launcher_model_->items()[0].type);
269 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
270 launcher_model_->items()[1].type);
271 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
272 launcher_model_->items()[2].type);
273 EXPECT_EQ(ash::TYPE_APP_LIST,
274 launcher_model_->items()[3].type);
275
276 launcher_delegate_.reset();
277 launcher_model_.reset(new ash::LauncherModel);
278 launcher_delegate_.reset(
279 ChromeLauncherController::CreateInstance(profile(),
280 launcher_model_.get()));
281 app_tab_helper_ = new AppTabHelperImpl;
282 app_tab_helper_->SetAppID(tab1.get(), "1");
283 app_tab_helper_->SetAppID(tab2.get(), "2");
284 ResetAppTabHelper();
285
286 launcher_delegate_->Init();
287
288 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
289 launcher_model_->items()[0].type);
290 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
291 launcher_model_->items()[1].type);
292 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
293 launcher_model_->items()[2].type);
294 EXPECT_EQ(ash::TYPE_APP_LIST,
295 launcher_model_->items()[3].type);
296 }
297
298 class BrowserLauncherItemControllerTest
299 : public LauncherItemControllerPerAppTest {
300 public:
301 BrowserLauncherItemControllerTest() {}
302
303 virtual void SetUp() OVERRIDE {
304 CommandLine::ForCurrentProcess()->AppendSwitch(
305 ash::switches::kAshDisablePerAppLauncher);
306
307 LauncherItemControllerPerAppTest::SetUp();
308 }
309
310 virtual void TearDown() OVERRIDE {
311 LauncherItemControllerPerAppTest::TearDown();
312 }
313 };
314
315 // Verifies a new launcher item is added for TYPE_TABBED.
316 TEST_F(BrowserLauncherItemControllerTest, TabbedSetup) {
317 size_t initial_size = launcher_model_->items().size();
318 {
319 scoped_ptr<content::WebContents> web_contents(CreateTestWebContents());
320 State state(this, std::string(),
321 BrowserLauncherItemController::TYPE_TABBED);
322
323 // There should be one more item.
324 ASSERT_EQ(initial_size + 1, launcher_model_->items().size());
325 // New item should be added at the end.
326 EXPECT_EQ(ash::TYPE_TABBED, state.GetUpdaterItem().type);
327 }
328
329 // Deleting the BrowserLauncherItemController should have removed the item.
330 ASSERT_EQ(initial_size, launcher_model_->items().size());
331
332 // Do the same, but this time add the tab first.
333 {
334 scoped_ptr<content::WebContents> web_contents(CreateTestWebContents());
335
336 TabHelperTabStripModelDelegate tab_strip_delegate;
337 TabStripModel tab_strip(&tab_strip_delegate, profile());
338 tab_strip.InsertWebContentsAt(0,
339 web_contents.get(),
340 TabStripModel::ADD_ACTIVE);
341 aura::Window window(NULL);
342 window.Init(ui::LAYER_NOT_DRAWN);
343 root_window()->AddChild(&window);
344 BrowserLauncherItemController updater(
345 LauncherItemController::TYPE_TABBED,
346 &window, &tab_strip, launcher_delegate_.get(),
347 std::string());
348 updater.Init();
349
350 // There should be one more item.
351 ASSERT_EQ(initial_size + 1, launcher_model_->items().size());
352 // New item should be added at the end.
353 EXPECT_EQ(ash::TYPE_TABBED, GetItem(&updater).type);
354 }
355 }
356
357 // Verifies pinned apps are persisted and restored.
358 TEST_F(BrowserLauncherItemControllerTest, PersistPinned) {
359 size_t initial_size = launcher_model_->items().size();
360 scoped_ptr<content::WebContents> tab1(CreateTestWebContents());
361
362 app_tab_helper_->SetAppID(tab1.get(), "1");
363
364 app_icon_loader_->GetAndClearFetchCount();
365 launcher_delegate_->PinAppWithID("1");
366 ash::LauncherID id = launcher_delegate_->GetLauncherIDForAppID("1");
367 int app_index = launcher_model_->ItemIndexByID(id);
368 EXPECT_GT(app_icon_loader_->GetAndClearFetchCount(), 0);
369 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
370 launcher_model_->items()[app_index].type);
371 EXPECT_TRUE(launcher_delegate_->IsAppPinned("1"));
372 EXPECT_FALSE(launcher_delegate_->IsAppPinned("0"));
373 EXPECT_EQ(initial_size + 1, launcher_model_->items().size());
374
375 launcher_delegate_.reset();
376 launcher_model_.reset(new ash::LauncherModel);
377 launcher_delegate_.reset(
378 ChromeLauncherController::CreateInstance(profile(),
379 launcher_model_.get()));
380 app_tab_helper_ = new AppTabHelperImpl;
381 app_tab_helper_->SetAppID(tab1.get(), "1");
382 ResetAppTabHelper();
383 app_icon_loader_ = new AppIconLoaderImpl;
384 ResetAppIconLoader();
385 launcher_delegate_->Init();
386 EXPECT_GT(app_icon_loader_->GetAndClearFetchCount(), 0);
387 ASSERT_EQ(initial_size + 1, launcher_model_->items().size());
388 EXPECT_TRUE(launcher_delegate_->IsAppPinned("1"));
389 EXPECT_FALSE(launcher_delegate_->IsAppPinned("0"));
390 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
391 launcher_model_->items()[app_index].type);
392
393 UnpinAppsWithID("1");
394 ASSERT_EQ(initial_size, launcher_model_->items().size());
395 }
396
397 // Verify that launcher item positions are persisted and restored.
398 TEST_F(BrowserLauncherItemControllerTest,
399 PersistLauncherItemPositionsPerBrowser) {
400 int browser_shortcut_index = 0;
401 int app_list_index = 1;
402
403 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
404 launcher_model_->items()[browser_shortcut_index].type);
405 EXPECT_EQ(ash::TYPE_APP_LIST,
406 launcher_model_->items()[app_list_index].type);
407
408 scoped_ptr<content::WebContents> tab1(CreateTestWebContents());
409 scoped_ptr<content::WebContents> tab2(CreateTestWebContents());
410
411 app_tab_helper_->SetAppID(tab1.get(), "1");
412 app_tab_helper_->SetAppID(tab2.get(), "2");
413
414 app_icon_loader_->GetAndClearFetchCount();
415 launcher_delegate_->PinAppWithID("1");
416 ash::LauncherID id = launcher_delegate_->GetLauncherIDForAppID("1");
417 int app1_index = launcher_model_->ItemIndexByID(id);
418
419 launcher_delegate_->PinAppWithID("2");
420 id = launcher_delegate_->GetLauncherIDForAppID("2");
421 int app2_index = launcher_model_->ItemIndexByID(id);
422
423 launcher_model_->Move(browser_shortcut_index, app1_index);
424
425 browser_shortcut_index = 1;
426 app1_index = 0;
427
428 EXPECT_GT(app_icon_loader_->GetAndClearFetchCount(), 0);
429 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
430 launcher_model_->items()[app1_index].type);
431 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
432 launcher_model_->items()[browser_shortcut_index].type);
433 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
434 launcher_model_->items()[app2_index].type);
435
436 launcher_delegate_.reset();
437 launcher_model_.reset(new ash::LauncherModel);
438 launcher_delegate_.reset(
439 ChromeLauncherController::CreateInstance(profile(),
440 launcher_model_.get()));
441
442 app_tab_helper_ = new AppTabHelperImpl;
443 app_tab_helper_->SetAppID(tab1.get(), "1");
444 app_tab_helper_->SetAppID(tab2.get(), "2");
445 ResetAppTabHelper();
446 app_icon_loader_ = new AppIconLoaderImpl;
447 ResetAppIconLoader();
448 launcher_delegate_->Init();
449
450 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
451 launcher_model_->items()[app1_index].type);
452 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT,
453 launcher_model_->items()[browser_shortcut_index].type);
454 EXPECT_EQ(ash::TYPE_APP_SHORTCUT,
455 launcher_model_->items()[app2_index].type);
456 }
457
458 // Confirm that tabbed browsers handle activation correctly.
459 TEST_F(BrowserLauncherItemControllerTest, ActivateBrowsers) {
460 State state1(this, std::string(), BrowserLauncherItemController::TYPE_TABBED);
461
462 // First browser is active.
463 EXPECT_EQ(ash::STATUS_ACTIVE, state1.GetUpdaterItem().status);
464
465 {
466 // Both running.
467 State state2(this, std::string(),
468 BrowserLauncherItemController::TYPE_TABBED);
469 EXPECT_EQ(ash::STATUS_ACTIVE, state2.GetUpdaterItem().status);
470 EXPECT_EQ(ash::STATUS_RUNNING, state1.GetUpdaterItem().status);
471
472 // Make first browser active again.
473 activation_client_->ActivateWindow(&state1.window);
474 EXPECT_EQ(ash::STATUS_ACTIVE, state1.GetUpdaterItem().status);
475 EXPECT_EQ(ash::STATUS_RUNNING, state2.GetUpdaterItem().status);
476
477 // And back to second.
478 activation_client_->ActivateWindow(&state2.window);
479 EXPECT_EQ(ash::STATUS_ACTIVE, state2.GetUpdaterItem().status);
480 EXPECT_EQ(ash::STATUS_RUNNING, state1.GetUpdaterItem().status);
481 }
482
483 // First browser should be active again after second is closed.
484 EXPECT_EQ(ash::STATUS_ACTIVE, state1.GetUpdaterItem().status);
485 }
486
487 // Confirm that window activation works through the model.
488 TEST_F(BrowserLauncherItemControllerTest, SwitchDirectlyToApp) {
489 State state1(this, std::string(),
490 BrowserLauncherItemController::TYPE_TABBED);
491 int index1 = launcher_model_->ItemIndexByID(state1.GetUpdaterItem().id);
492
493 // Second app is active and first is inactive.
494 State state2(this, std::string(),
495 BrowserLauncherItemController::TYPE_TABBED);
496 int index2 = launcher_model_->ItemIndexByID(state2.GetUpdaterItem().id);
497
498 EXPECT_EQ(ash::STATUS_RUNNING, state1.GetUpdaterItem().status);
499 EXPECT_EQ(ash::STATUS_ACTIVE, state2.GetUpdaterItem().status);
500 EXPECT_EQ(&state2.window, activation_client_->GetActiveWindow());
501
502 // Test that we can properly switch to the first item.
503 ash::LauncherItem new_item1(launcher_model_->items()[index1]);
504 new_item1.status = ash::STATUS_ACTIVE;
505 launcher_model_->Set(index1, new_item1);
506 EXPECT_EQ(ash::STATUS_ACTIVE, launcher_model_->items()[index1].status);
507 EXPECT_EQ(ash::STATUS_RUNNING, launcher_model_->items()[index2].status);
508 EXPECT_EQ(&state1.window, activation_client_->GetActiveWindow());
509
510 // And to the second item active.
511 ash::LauncherItem new_item2(launcher_model_->items()[index2]);
512 new_item2.status = ash::STATUS_ACTIVE;
513 launcher_model_->Set(index2, new_item2);
514 EXPECT_EQ(ash::STATUS_RUNNING, launcher_model_->items()[index1].status);
515 EXPECT_EQ(ash::STATUS_ACTIVE, launcher_model_->items()[index2].status);
516 EXPECT_EQ(&state2.window, activation_client_->GetActiveWindow());
517 }
518
519 // Test attention states of windows.
520 TEST_F(BrowserLauncherItemControllerTest, FlashWindow) {
521 // App panel first
522 State app_state(this, "1", BrowserLauncherItemController::TYPE_APP_PANEL);
523 EXPECT_EQ(ash::STATUS_ACTIVE, app_state.GetUpdaterItem().status);
524
525 // Active windows don't show attention.
526 app_state.window.SetProperty(aura::client::kDrawAttentionKey, true);
527 EXPECT_EQ(ash::STATUS_ACTIVE, app_state.GetUpdaterItem().status);
528
529 // Then browser window
530 State browser_state(
531 this, std::string(), BrowserLauncherItemController::TYPE_TABBED);
532 // First browser is active.
533 EXPECT_EQ(ash::STATUS_ACTIVE, browser_state.GetUpdaterItem().status);
534 EXPECT_EQ(ash::STATUS_RUNNING, app_state.GetUpdaterItem().status);
535
536 // App window should go to attention state.
537 app_state.window.SetProperty(aura::client::kDrawAttentionKey, true);
538 EXPECT_EQ(ash::STATUS_ATTENTION, app_state.GetUpdaterItem().status);
539
540 // Activating app window should clear attention state.
541 activation_client_->ActivateWindow(&app_state.window);
542 EXPECT_EQ(ash::STATUS_ACTIVE, app_state.GetUpdaterItem().status);
543 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698