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

Side by Side Diff: chrome/browser/android/banners/app_banner_manager.cc

Issue 886643003: Use heuristic to work out when to prompt for app install banners. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove other patch Created 5 years, 10 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
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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 61
62 void AppBannerManager::BlockBanner(JNIEnv* env, 62 void AppBannerManager::BlockBanner(JNIEnv* env,
63 jobject obj, 63 jobject obj,
64 jstring jurl, 64 jstring jurl,
65 jstring jpackage) { 65 jstring jpackage) {
66 if (!web_contents()) 66 if (!web_contents())
67 return; 67 return;
68 68
69 GURL url(ConvertJavaStringToUTF8(env, jurl)); 69 GURL url(ConvertJavaStringToUTF8(env, jurl));
70 std::string package_name = ConvertJavaStringToUTF8(env, jpackage); 70 std::string package_name = ConvertJavaStringToUTF8(env, jpackage);
71 AppBannerSettingsHelper::Block(web_contents(), url, package_name); 71 AppBannerSettingsHelper::RecordBannerEvent(
72 web_contents(), url, package_name,
73 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now());
72 } 74 }
73 75
74 void AppBannerManager::Block() const { 76 void AppBannerManager::Block() const {
75 if (!web_contents() || manifest_.IsEmpty()) 77 if (!web_contents() || manifest_.IsEmpty())
76 return; 78 return;
77 79
78 AppBannerSettingsHelper::Block(web_contents(), 80 AppBannerSettingsHelper::RecordBannerEvent(
79 web_contents()->GetURL(), 81 web_contents(), web_contents()->GetURL(), manifest_.start_url.spec(),
80 manifest_.start_url.spec()); 82 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now());
81 } 83 }
82 84
83 void AppBannerManager::Install() const { 85 void AppBannerManager::Install() const {
84 if (!web_contents()) 86 if (!web_contents())
85 return; 87 return;
86 88
87 if (!manifest_.IsEmpty()) { 89 if (!manifest_.IsEmpty()) {
90 AppBannerSettingsHelper::RecordBannerEvent(
91 web_contents(), web_contents()->GetURL(), manifest_.start_url.spec(),
92 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
93 base::Time::Now());
94
88 InstallManifestApp(manifest_, *app_icon_.get()); 95 InstallManifestApp(manifest_, *app_icon_.get());
89 } 96 }
90 } 97 }
91 98
92 gfx::Image AppBannerManager::GetIcon() const { 99 gfx::Image AppBannerManager::GetIcon() const {
93 return gfx::Image::CreateFrom1xBitmap(*app_icon_.get()); 100 return gfx::Image::CreateFrom1xBitmap(*app_icon_.get());
94 } 101 }
95 102
96 void AppBannerManager::ReplaceWebContents(JNIEnv* env, 103 void AppBannerManager::ReplaceWebContents(JNIEnv* env,
97 jobject obj, 104 jobject obj,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 171
165 void AppBannerManager::OnDidCheckHasServiceWorker(bool has_same) { 172 void AppBannerManager::OnDidCheckHasServiceWorker(bool has_same) {
166 if (has_same) { 173 if (has_same) {
167 // TODO(benwells): Check triggering parameters. 174 // TODO(benwells): Check triggering parameters.
168 GURL icon_url = ManifestIconSelector::FindBestMatchingIcon( 175 GURL icon_url = ManifestIconSelector::FindBestMatchingIcon(
169 manifest_.icons, GetPreferredIconSize(), 176 manifest_.icons, GetPreferredIconSize(),
170 gfx::Screen::GetScreenFor(web_contents()->GetNativeView())); 177 gfx::Screen::GetScreenFor(web_contents()->GetNativeView()));
171 if (icon_url.is_empty()) 178 if (icon_url.is_empty())
172 return; 179 return;
173 180
181 if (!CheckIfShouldShow(manifest_.start_url.spec()))
182 return;
183
174 FetchIcon(icon_url); 184 FetchIcon(icon_url);
175 } 185 }
176 } 186 }
177 187
188 bool AppBannerManager::CheckIfShouldShow(
189 const std::string& package_or_start_url) {
190 AppBannerSettingsHelper::RecordBannerEvent(
191 web_contents(), validated_url_, package_or_start_url,
192 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, base::Time::Now());
193 if (!AppBannerSettingsHelper::ShouldShowBanner(web_contents(), validated_url_,
194 package_or_start_url,
195 base::Time::Now())) {
196 return false;
197 }
198
199 AppBannerSettingsHelper::RecordBannerEvent(
200 web_contents(), validated_url_, package_or_start_url,
201 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, base::Time::Now());
gone 2015/02/05 22:21:10 Seems strange to record that we did show it in a f
benwells 2015/02/06 16:36:28 Good point. I've split this into two functions: Re
202 return true;
203 }
204
178 bool AppBannerManager::OnMessageReceived(const IPC::Message& message) { 205 bool AppBannerManager::OnMessageReceived(const IPC::Message& message) {
179 bool handled = true; 206 bool handled = true;
180 IPC_BEGIN_MESSAGE_MAP(AppBannerManager, message) 207 IPC_BEGIN_MESSAGE_MAP(AppBannerManager, message)
181 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent, 208 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent,
182 OnDidRetrieveMetaTagContent) 209 OnDidRetrieveMetaTagContent)
183 IPC_MESSAGE_UNHANDLED(handled = false) 210 IPC_MESSAGE_UNHANDLED(handled = false)
184 IPC_END_MESSAGE_MAP() 211 IPC_END_MESSAGE_MAP()
185 return handled; 212 return handled;
186 } 213 }
187 214
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 const std::string& tag_content, 255 const std::string& tag_content,
229 const GURL& expected_url) { 256 const GURL& expected_url) {
230 DCHECK(web_contents()); 257 DCHECK(web_contents());
231 if (!success || tag_name != kBannerTag || validated_url_ != expected_url || 258 if (!success || tag_name != kBannerTag || validated_url_ != expected_url ||
232 tag_content.size() >= chrome::kMaxMetaTagAttributeLength) { 259 tag_content.size() >= chrome::kMaxMetaTagAttributeLength) {
233 return; 260 return;
234 } 261 }
235 262
236 banners::TrackDisplayEvent(DISPLAY_BANNER_REQUESTED); 263 banners::TrackDisplayEvent(DISPLAY_BANNER_REQUESTED);
237 264
238 if (!AppBannerSettingsHelper::IsAllowed(web_contents(), 265 if (!CheckIfShouldShow(tag_content))
239 expected_url,
240 tag_content)) {
241 return; 266 return;
242 }
243 267
244 // Send the info to the Java side to get info about the app. 268 // Send the info to the Java side to get info about the app.
245 JNIEnv* env = base::android::AttachCurrentThread(); 269 JNIEnv* env = base::android::AttachCurrentThread();
246 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); 270 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
247 if (jobj.is_null()) 271 if (jobj.is_null())
248 return; 272 return;
249 273
250 ScopedJavaLocalRef<jstring> jurl( 274 ScopedJavaLocalRef<jstring> jurl(
251 ConvertUTF8ToJavaString(env, expected_url.spec())); 275 ConvertUTF8ToJavaString(env, expected_url.spec()));
252 ScopedJavaLocalRef<jstring> jpackage( 276 ScopedJavaLocalRef<jstring> jpackage(
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 return base::CommandLine::ForCurrentProcess()->HasSwitch( 344 return base::CommandLine::ForCurrentProcess()->HasSwitch(
321 switches::kEnableAppInstallAlerts); 345 switches::kEnableAppInstallAlerts);
322 } 346 }
323 347
324 // Register native methods 348 // Register native methods
325 bool RegisterAppBannerManager(JNIEnv* env) { 349 bool RegisterAppBannerManager(JNIEnv* env) {
326 return RegisterNativesImpl(env); 350 return RegisterNativesImpl(env);
327 } 351 }
328 352
329 } // namespace banners 353 } // namespace banners
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698