OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/android/banners/app_banner_manager.h" | 5 #include "chrome/browser/android/banners/app_banner_manager.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 #include "ui/gfx/android/java_bitmap.h" | 37 #include "ui/gfx/android/java_bitmap.h" |
38 #include "ui/gfx/screen.h" | 38 #include "ui/gfx/screen.h" |
39 | 39 |
40 using base::android::ConvertJavaStringToUTF8; | 40 using base::android::ConvertJavaStringToUTF8; |
41 using base::android::ConvertJavaStringToUTF16; | 41 using base::android::ConvertJavaStringToUTF16; |
42 using base::android::ConvertUTF8ToJavaString; | 42 using base::android::ConvertUTF8ToJavaString; |
43 using base::android::ConvertUTF16ToJavaString; | 43 using base::android::ConvertUTF16ToJavaString; |
44 | 44 |
45 namespace { | 45 namespace { |
46 const char kBannerTag[] = "google-play-id"; | 46 const char kBannerTag[] = "google-play-id"; |
| 47 base::TimeDelta gTimeDeltaForTesting; |
47 } | 48 } |
48 | 49 |
49 namespace banners { | 50 namespace banners { |
50 | 51 |
51 AppBannerManager::AppBannerManager(JNIEnv* env, jobject obj) | 52 AppBannerManager::AppBannerManager(JNIEnv* env, jobject obj) |
52 : weak_java_banner_view_manager_(env, obj), weak_factory_(this) { | 53 : weak_java_banner_view_manager_(env, obj), weak_factory_(this) { |
53 } | 54 } |
54 | 55 |
55 AppBannerManager::~AppBannerManager() { | 56 AppBannerManager::~AppBannerManager() { |
56 } | 57 } |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 return; | 138 return; |
138 | 139 |
139 FetchIcon(icon_url); | 140 FetchIcon(icon_url); |
140 } | 141 } |
141 } | 142 } |
142 | 143 |
143 void AppBannerManager::RecordCouldShowBanner( | 144 void AppBannerManager::RecordCouldShowBanner( |
144 const std::string& package_or_start_url) { | 145 const std::string& package_or_start_url) { |
145 AppBannerSettingsHelper::RecordBannerEvent( | 146 AppBannerSettingsHelper::RecordBannerEvent( |
146 web_contents(), validated_url_, package_or_start_url, | 147 web_contents(), validated_url_, package_or_start_url, |
147 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, base::Time::Now()); | 148 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, GetCurrentTime()); |
148 } | 149 } |
149 | 150 |
150 bool AppBannerManager::CheckIfShouldShow( | 151 bool AppBannerManager::CheckIfShouldShow( |
151 const std::string& package_or_start_url) { | 152 const std::string& package_or_start_url) { |
152 if (!AppBannerSettingsHelper::ShouldShowBanner(web_contents(), validated_url_, | 153 if (!AppBannerSettingsHelper::ShouldShowBanner(web_contents(), validated_url_, |
153 package_or_start_url, | 154 package_or_start_url, |
154 base::Time::Now())) { | 155 GetCurrentTime())) { |
155 return false; | 156 return false; |
156 } | 157 } |
157 | 158 |
158 AppBannerSettingsHelper::RecordBannerEvent( | 159 AppBannerSettingsHelper::RecordBannerEvent( |
159 web_contents(), validated_url_, package_or_start_url, | 160 web_contents(), validated_url_, package_or_start_url, |
160 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, base::Time::Now()); | 161 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, GetCurrentTime()); |
161 return true; | 162 return true; |
162 } | 163 } |
163 | 164 |
164 bool AppBannerManager::OnMessageReceived(const IPC::Message& message) { | 165 bool AppBannerManager::OnMessageReceived(const IPC::Message& message) { |
165 bool handled = true; | 166 bool handled = true; |
166 IPC_BEGIN_MESSAGE_MAP(AppBannerManager, message) | 167 IPC_BEGIN_MESSAGE_MAP(AppBannerManager, message) |
167 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent, | 168 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent, |
168 OnDidRetrieveMetaTagContent) | 169 OnDidRetrieveMetaTagContent) |
169 IPC_MESSAGE_UNHANDLED(handled = false) | 170 IPC_MESSAGE_UNHANDLED(handled = false) |
170 IPC_END_MESSAGE_MAP() | 171 IPC_END_MESSAGE_MAP() |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 if (validated_url_ != web_contents()->GetURL()) | 252 if (validated_url_ != web_contents()->GetURL()) |
252 return false; | 253 return false; |
253 | 254 |
254 std::string image_url = ConvertJavaStringToUTF8(env, jicon_url); | 255 std::string image_url = ConvertJavaStringToUTF8(env, jicon_url); |
255 app_title_ = ConvertJavaStringToUTF16(env, japp_title); | 256 app_title_ = ConvertJavaStringToUTF16(env, japp_title); |
256 native_app_package_ = ConvertJavaStringToUTF8(env, japp_package); | 257 native_app_package_ = ConvertJavaStringToUTF8(env, japp_package); |
257 native_app_data_.Reset(env, japp_data); | 258 native_app_data_.Reset(env, japp_data); |
258 return FetchIcon(GURL(image_url)); | 259 return FetchIcon(GURL(image_url)); |
259 } | 260 } |
260 | 261 |
| 262 int AppBannerManager::GetNumActiveFetchers(JNIEnv* env, jobject obj) { |
| 263 return fetcher_.get() ? 1 : 0; |
| 264 } |
| 265 |
261 bool AppBannerManager::FetchIcon(const GURL& image_url) { | 266 bool AppBannerManager::FetchIcon(const GURL& image_url) { |
262 if (!web_contents()) | 267 if (!web_contents()) |
263 return false; | 268 return false; |
264 | 269 |
265 // Begin asynchronously fetching the app icon. | 270 // Begin asynchronously fetching the app icon. |
266 Profile* profile = | 271 Profile* profile = |
267 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | 272 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
268 fetcher_.reset(new chrome::BitmapFetcher(image_url, this)); | 273 fetcher_.reset(new chrome::BitmapFetcher(image_url, this)); |
269 fetcher_.get()->Start( | 274 fetcher_.get()->Start( |
270 profile->GetRequestContext(), | 275 profile->GetRequestContext(), |
271 std::string(), | 276 std::string(), |
272 net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 277 net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
273 net::LOAD_NORMAL); | 278 net::LOAD_NORMAL); |
274 app_icon_url_ = image_url; | 279 app_icon_url_ = image_url; |
275 return true; | 280 return true; |
276 } | 281 } |
277 | 282 |
278 int AppBannerManager::GetPreferredIconSize() { | 283 int AppBannerManager::GetPreferredIconSize() { |
279 JNIEnv* env = base::android::AttachCurrentThread(); | 284 JNIEnv* env = base::android::AttachCurrentThread(); |
280 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); | 285 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); |
281 if (jobj.is_null()) | 286 if (jobj.is_null()) |
282 return 0; | 287 return 0; |
283 | 288 |
284 return Java_AppBannerManager_getPreferredIconSize(env, jobj.obj()); | 289 return Java_AppBannerManager_getPreferredIconSize(env, jobj.obj()); |
285 } | 290 } |
286 | 291 |
| 292 // static |
| 293 base::Time AppBannerManager::GetCurrentTime() { |
| 294 return base::Time::Now() + gTimeDeltaForTesting; |
| 295 } |
| 296 |
287 void RecordDismissEvent(JNIEnv* env, jclass clazz, jint metric) { | 297 void RecordDismissEvent(JNIEnv* env, jclass clazz, jint metric) { |
288 banners::TrackDismissEvent(metric); | 298 banners::TrackDismissEvent(metric); |
289 } | 299 } |
290 | 300 |
291 void RecordInstallEvent(JNIEnv* env, jclass clazz, jint metric) { | 301 void RecordInstallEvent(JNIEnv* env, jclass clazz, jint metric) { |
292 banners::TrackInstallEvent(metric); | 302 banners::TrackInstallEvent(metric); |
293 } | 303 } |
294 | 304 |
295 jlong Init(JNIEnv* env, jobject obj) { | 305 jlong Init(JNIEnv* env, jobject obj) { |
296 AppBannerManager* manager = new AppBannerManager(env, obj); | 306 AppBannerManager* manager = new AppBannerManager(env, obj); |
297 return reinterpret_cast<intptr_t>(manager); | 307 return reinterpret_cast<intptr_t>(manager); |
298 } | 308 } |
299 | 309 |
300 jboolean IsEnabled(JNIEnv* env, jclass clazz) { | 310 jboolean IsEnabled(JNIEnv* env, jclass clazz) { |
301 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 311 return base::CommandLine::ForCurrentProcess()->HasSwitch( |
302 switches::kEnableAppInstallAlerts); | 312 switches::kEnableAppInstallAlerts); |
303 } | 313 } |
304 | 314 |
| 315 void SetTimeDeltaForTesting(JNIEnv* env, jclass clazz, jint days) { |
| 316 gTimeDeltaForTesting = base::TimeDelta::FromDays(days); |
| 317 } |
| 318 |
305 // Register native methods | 319 // Register native methods |
306 bool RegisterAppBannerManager(JNIEnv* env) { | 320 bool RegisterAppBannerManager(JNIEnv* env) { |
307 return RegisterNativesImpl(env); | 321 return RegisterNativesImpl(env); |
308 } | 322 } |
309 | 323 |
310 } // namespace banners | 324 } // namespace banners |
OLD | NEW |