Chromium Code Reviews| 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; | |
|
gone
2015/02/14 01:29:27
Forked off from another CL which has multiple fetc
| |
| 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 |