OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/chrome_to_mobile_service.h" | 5 #include "chrome/browser/chrome_to_mobile_service.h" |
6 | 6 |
7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
8 #include "chrome/app/chrome_command_ids.h" | 8 #include "chrome/app/chrome_command_ids.h" |
9 #include "chrome/browser/chrome_to_mobile_service_factory.h" | 9 #include "chrome/browser/chrome_to_mobile_service_factory.h" |
10 #include "chrome/browser/command_updater.h" | 10 #include "chrome/browser/command_updater.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 | 46 |
47 private: | 47 private: |
48 FeatureSwitch::ScopedOverride enable_action_box_; | 48 FeatureSwitch::ScopedOverride enable_action_box_; |
49 | 49 |
50 DISALLOW_COPY_AND_ASSIGN(ChromeToMobileServiceTest); | 50 DISALLOW_COPY_AND_ASSIGN(ChromeToMobileServiceTest); |
51 }; | 51 }; |
52 | 52 |
53 // Chrome To Mobile is currently gated on the Action Box UI, | 53 // Chrome To Mobile is currently gated on the Action Box UI, |
54 // so need to enable this feature for the test. | 54 // so need to enable this feature for the test. |
55 ChromeToMobileServiceTest::ChromeToMobileServiceTest() | 55 ChromeToMobileServiceTest::ChromeToMobileServiceTest() |
56 : enable_action_box_(FeatureSwitch::action_box(), true) {} | 56 : enable_action_box_(FeatureSwitch::action_box(), true) { |
| 57 } |
57 | 58 |
58 ChromeToMobileServiceTest::~ChromeToMobileServiceTest() {} | 59 ChromeToMobileServiceTest::~ChromeToMobileServiceTest() {} |
59 | 60 |
60 ChromeToMobileService* ChromeToMobileServiceTest::GetService() const { | 61 ChromeToMobileService* ChromeToMobileServiceTest::GetService() const { |
61 return ChromeToMobileServiceFactory::GetForProfile(profile()); | 62 return ChromeToMobileServiceFactory::GetForProfile(profile()); |
62 } | 63 } |
63 | 64 |
64 bool ChromeToMobileServiceTest::UpdateAndGetVerifiedCommandState() { | 65 bool ChromeToMobileServiceTest::UpdateAndGetVerifiedCommandState() { |
65 bool state = ChromeToMobileService::UpdateAndGetCommandState(browser()); | 66 bool state = ChromeToMobileService::UpdateAndGetCommandState(browser()); |
66 CommandUpdater* updater = browser()->command_controller()->command_updater(); | 67 CommandUpdater* updater = browser()->command_controller()->command_updater(); |
67 EXPECT_EQ(state, updater->IsCommandEnabled(IDC_CHROME_TO_MOBILE_PAGE)); | 68 EXPECT_EQ(state, updater->IsCommandEnabled(IDC_CHROME_TO_MOBILE_PAGE)); |
68 return state; | 69 return state; |
69 } | 70 } |
70 | 71 |
71 void ChromeToMobileServiceTest::SetDeviceCount(size_t count) { | 72 void ChromeToMobileServiceTest::SetDeviceCount(size_t count) { |
72 ListValue mobiles; | 73 ListValue mobiles; |
73 for (size_t i = 0; i < count; ++i) | 74 for (size_t i = 0; i < count; ++i) |
74 mobiles.Append(new DictionaryValue()); | 75 mobiles.Append(new DictionaryValue()); |
75 profile()->GetPrefs()->Set(prefs::kChromeToMobileDeviceList, mobiles); | 76 profile()->GetPrefs()->Set(prefs::kChromeToMobileDeviceList, mobiles); |
76 } | 77 } |
77 | 78 |
78 void ChromeToMobileServiceTest::FulfillFeatureRequirements() { | 79 void ChromeToMobileServiceTest::FulfillFeatureRequirements() { |
79 AddTab(browser(), GURL("http://foo")); | 80 AddTab(browser(), GURL("http://foo")); |
80 SetDeviceCount(1); | 81 SetDeviceCount(1); |
81 GetService()->OnInvalidatorStateChange(syncer::INVALIDATIONS_ENABLED); | 82 GetService()->OnInvalidatorStateChange(syncer::INVALIDATIONS_ENABLED); |
82 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); | 83 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); |
83 } | 84 } |
84 | 85 |
85 // Test that GetMobiles and HasMobiles require Sync Invalidations being enabled. | 86 // Test that GetMobiles and HasMobiles require Sync Invalidations being enabled. |
86 TEST_F(ChromeToMobileServiceTest, GetMobiles) { | 87 TEST_F(ChromeToMobileServiceTest, DISABLED_GetMobiles) { |
87 ChromeToMobileService* service = GetService(); | 88 ChromeToMobileService* service = GetService(); |
88 EXPECT_EQ(NULL, service->GetMobiles()); | 89 EXPECT_EQ(NULL, service->GetMobiles()); |
89 EXPECT_FALSE(service->HasMobiles()); | 90 EXPECT_FALSE(service->HasMobiles()); |
90 | 91 |
91 // Add a mock mobile device to the profile prefs. | 92 // Add a mock mobile device to the profile prefs. |
92 SetDeviceCount(1); | 93 SetDeviceCount(1); |
93 | 94 |
94 // GetMobiles() still returns NULL until Sync Invalidations are enabled. | 95 // GetMobiles() still returns NULL until Sync Invalidations are enabled. |
95 EXPECT_EQ(NULL, service->GetMobiles()); | 96 EXPECT_EQ(NULL, service->GetMobiles()); |
96 EXPECT_FALSE(service->HasMobiles()); | 97 EXPECT_FALSE(service->HasMobiles()); |
(...skipping 12 matching lines...) Expand all Loading... |
109 // GetMobiles() returns NULL after Sync Invalidations are disabled. | 110 // GetMobiles() returns NULL after Sync Invalidations are disabled. |
110 service->OnInvalidatorStateChange(syncer::TRANSIENT_INVALIDATION_ERROR); | 111 service->OnInvalidatorStateChange(syncer::TRANSIENT_INVALIDATION_ERROR); |
111 EXPECT_EQ(NULL, service->GetMobiles()); | 112 EXPECT_EQ(NULL, service->GetMobiles()); |
112 EXPECT_FALSE(service->HasMobiles()); | 113 EXPECT_FALSE(service->HasMobiles()); |
113 service->OnInvalidatorStateChange(syncer::INVALIDATION_CREDENTIALS_REJECTED); | 114 service->OnInvalidatorStateChange(syncer::INVALIDATION_CREDENTIALS_REJECTED); |
114 EXPECT_EQ(NULL, service->GetMobiles()); | 115 EXPECT_EQ(NULL, service->GetMobiles()); |
115 EXPECT_FALSE(service->HasMobiles()); | 116 EXPECT_FALSE(service->HasMobiles()); |
116 } | 117 } |
117 | 118 |
118 // Test fulfilling the requirements to enable the feature. | 119 // Test fulfilling the requirements to enable the feature. |
119 TEST_F(ChromeToMobileServiceTest, RequirementsToEnable) { | 120 TEST_F(ChromeToMobileServiceTest, DISABLED_RequirementsToEnable) { |
120 // Navigate to a page with a URL that is valid to send. | 121 // Navigate to a page with a URL that is valid to send. |
121 AddTab(browser(), GURL("http://foo")); | 122 AddTab(browser(), GURL("http://foo")); |
122 EXPECT_FALSE(UpdateAndGetVerifiedCommandState()); | 123 EXPECT_FALSE(UpdateAndGetVerifiedCommandState()); |
123 | 124 |
124 // Add a mock mobile device to the profile prefs. | 125 // Add a mock mobile device to the profile prefs. |
125 SetDeviceCount(1); | 126 SetDeviceCount(1); |
126 EXPECT_FALSE(UpdateAndGetVerifiedCommandState()); | 127 EXPECT_FALSE(UpdateAndGetVerifiedCommandState()); |
127 | 128 |
128 // Send a fake notification that Sync Invalidations are enabled. | 129 // Send a fake notification that Sync Invalidations are enabled. |
129 GetService()->OnInvalidatorStateChange(syncer::INVALIDATIONS_ENABLED); | 130 GetService()->OnInvalidatorStateChange(syncer::INVALIDATIONS_ENABLED); |
130 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); | 131 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); |
131 } | 132 } |
132 | 133 |
133 // Test that the feature handles mobile device count changes properly. | 134 // Test that the feature handles mobile device count changes properly. |
134 TEST_F(ChromeToMobileServiceTest, MobileDevicesAreRequired) { | 135 TEST_F(ChromeToMobileServiceTest, DISABLED_MobileDevicesAreRequired) { |
135 FulfillFeatureRequirements(); | 136 FulfillFeatureRequirements(); |
136 | 137 |
137 // Removing all devices disables the feature. | 138 // Removing all devices disables the feature. |
138 SetDeviceCount(0); | 139 SetDeviceCount(0); |
139 EXPECT_FALSE(UpdateAndGetVerifiedCommandState()); | 140 EXPECT_FALSE(UpdateAndGetVerifiedCommandState()); |
140 | 141 |
141 // Restoring mobile devices re-enables the feature. | 142 // Restoring mobile devices re-enables the feature. |
142 SetDeviceCount(1); | 143 SetDeviceCount(1); |
143 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); | 144 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); |
144 SetDeviceCount(3); | 145 SetDeviceCount(3); |
145 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); | 146 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); |
146 } | 147 } |
147 | 148 |
148 // Test that the feature handles Sync Invalidations state changes properly. | 149 // Test that the feature handles Sync Invalidations state changes properly. |
149 TEST_F(ChromeToMobileServiceTest, SyncInvalidationsAreRequired) { | 150 TEST_F(ChromeToMobileServiceTest, DISABLED_SyncInvalidationsAreRequired) { |
150 FulfillFeatureRequirements(); | 151 FulfillFeatureRequirements(); |
151 | 152 |
152 // Disabling Sync Invalidations disables the feature. | 153 // Disabling Sync Invalidations disables the feature. |
153 GetService()->OnInvalidatorStateChange(syncer::TRANSIENT_INVALIDATION_ERROR); | 154 GetService()->OnInvalidatorStateChange(syncer::TRANSIENT_INVALIDATION_ERROR); |
154 EXPECT_FALSE(UpdateAndGetVerifiedCommandState()); | 155 EXPECT_FALSE(UpdateAndGetVerifiedCommandState()); |
155 | 156 |
156 // Re-enabling Sync Invalidations re-enables the feature. | 157 // Re-enabling Sync Invalidations re-enables the feature. |
157 GetService()->OnInvalidatorStateChange(syncer::INVALIDATIONS_ENABLED); | 158 GetService()->OnInvalidatorStateChange(syncer::INVALIDATIONS_ENABLED); |
158 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); | 159 EXPECT_TRUE(UpdateAndGetVerifiedCommandState()); |
159 } | 160 } |
160 | 161 |
161 // Test that the feature handles various page URLs properly. | 162 // Test that the feature handles various page URLs properly. |
162 TEST_F(ChromeToMobileServiceTest, CertainSchemesAreRequired) { | 163 TEST_F(ChromeToMobileServiceTest, DISABLED_CertainSchemesAreRequired) { |
163 FulfillFeatureRequirements(); | 164 FulfillFeatureRequirements(); |
164 | 165 |
165 // Only http:, https:, and ftp: URLs are valid to send. | 166 // Only http:, https:, and ftp: URLs are valid to send. |
166 struct { | 167 struct { |
167 std::string url; | 168 std::string url; |
168 bool enabled; | 169 bool enabled; |
169 } cases[] = { | 170 } cases[] = { |
170 { "http://foo", true }, { "https://foo", true }, { "ftp://foo", true }, | 171 { "http://foo", true }, { "https://foo", true }, { "ftp://foo", true }, |
171 { "about:foo", false }, { "chrome://foo", false }, { "file://foo", false }, | 172 { "about:foo", false }, { "chrome://foo", false }, { "file://foo", false }, |
172 { "data://foo", false }, { "view-source:foo", false }, | 173 { "data://foo", false }, { "view-source:foo", false }, |
173 }; | 174 }; |
174 | 175 |
175 content::NavigationController* controller = | 176 content::NavigationController* controller = |
176 &browser()->tab_strip_model()->GetActiveWebContents()->GetController(); | 177 &browser()->tab_strip_model()->GetActiveWebContents()->GetController(); |
177 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 178 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { |
178 NavigateAndCommit(controller, GURL(cases[i].url)); | 179 NavigateAndCommit(controller, GURL(cases[i].url)); |
179 EXPECT_EQ(cases[i].enabled, UpdateAndGetVerifiedCommandState()); | 180 EXPECT_EQ(cases[i].enabled, UpdateAndGetVerifiedCommandState()); |
180 } | 181 } |
181 } | 182 } |
182 | 183 |
183 // Ensure that only relevant notifications invalidate the access token. | 184 // Ensure that only relevant notifications invalidate the access token. |
184 TEST_F(ChromeToMobileServiceTest, TokenNotifications) { | 185 TEST_F(ChromeToMobileServiceTest, DISABLED_TokenNotifications) { |
185 const char dummy_string[] = "dummy"; | 186 const char dummy_string[] = "dummy"; |
186 ChromeToMobileService* service = GetService(); | 187 ChromeToMobileService* service = GetService(); |
187 service->SetAccessTokenForTest(dummy_string); | 188 service->SetAccessTokenForTest(dummy_string); |
188 ASSERT_FALSE(service->GetAccessTokenForTest().empty()); | 189 ASSERT_FALSE(service->GetAccessTokenForTest().empty()); |
189 | 190 |
190 // Send dummy service/token details (should not clear the token). | 191 // Send dummy service/token details (should not clear the token). |
191 TokenService::TokenAvailableDetails dummy_details(dummy_string, dummy_string); | 192 TokenService::TokenAvailableDetails dummy_details(dummy_string, dummy_string); |
192 service->Observe(chrome::NOTIFICATION_TOKEN_AVAILABLE, | 193 service->Observe(chrome::NOTIFICATION_TOKEN_AVAILABLE, |
193 content::Source<ChromeToMobileServiceTest>(this), | 194 content::Source<ChromeToMobileServiceTest>(this), |
194 content::Details<TokenService::TokenAvailableDetails>(&dummy_details)); | 195 content::Details<TokenService::TokenAvailableDetails>(&dummy_details)); |
195 EXPECT_FALSE(service->GetAccessTokenForTest().empty()); | 196 EXPECT_FALSE(service->GetAccessTokenForTest().empty()); |
196 | 197 |
197 // Send a Gaia OAuth2 Login service dummy token (should clear the token). | 198 // Send a Gaia OAuth2 Login service dummy token (should clear the token). |
198 TokenService::TokenAvailableDetails login_details( | 199 TokenService::TokenAvailableDetails login_details( |
199 GaiaConstants::kGaiaOAuth2LoginRefreshToken, dummy_string); | 200 GaiaConstants::kGaiaOAuth2LoginRefreshToken, dummy_string); |
200 service->Observe(chrome::NOTIFICATION_TOKEN_AVAILABLE, | 201 service->Observe(chrome::NOTIFICATION_TOKEN_AVAILABLE, |
201 content::Source<ChromeToMobileServiceTest>(this), | 202 content::Source<ChromeToMobileServiceTest>(this), |
202 content::Details<TokenService::TokenAvailableDetails>(&login_details)); | 203 content::Details<TokenService::TokenAvailableDetails>(&login_details)); |
203 EXPECT_TRUE(service->GetAccessTokenForTest().empty()); | 204 EXPECT_TRUE(service->GetAccessTokenForTest().empty()); |
204 } | 205 } |
205 | 206 |
206 } // namespace | 207 } // namespace |
OLD | NEW |