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

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: Review feedback 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 void AppBannerManager::BlockBanner(JNIEnv* env, 63 void AppBannerManager::BlockBanner(JNIEnv* env,
64 jobject obj, 64 jobject obj,
65 jstring jurl, 65 jstring jurl,
66 jstring jpackage) { 66 jstring jpackage) {
67 if (!web_contents()) 67 if (!web_contents())
68 return; 68 return;
69 69
70 GURL url(ConvertJavaStringToUTF8(env, jurl)); 70 GURL url(ConvertJavaStringToUTF8(env, jurl));
71 std::string package_name = ConvertJavaStringToUTF8(env, jpackage); 71 std::string package_name = ConvertJavaStringToUTF8(env, jpackage);
72 AppBannerSettingsHelper::Block(web_contents(), url, package_name); 72 AppBannerSettingsHelper::RecordBannerEvent(
73 web_contents(), url, package_name,
74 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now());
73 } 75 }
74 76
75 void AppBannerManager::Block() const { 77 void AppBannerManager::Block() const {
76 if (!web_contents()) 78 if (!web_contents())
77 return; 79 return;
78 80
79 if (!web_app_data_.IsEmpty()) { 81 if (!web_app_data_.IsEmpty()) {
80 AppBannerSettingsHelper::Block(web_contents(), 82 AppBannerSettingsHelper::RecordBannerEvent(
81 web_contents()->GetURL(), 83 web_contents(), web_contents()->GetURL(),
82 web_app_data_.start_url.spec()); 84 web_app_data_.start_url.spec(),
85 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time::Now());
83 } 86 }
84 } 87 }
85 88
86 void AppBannerManager::OnInfoBarDestroyed() { 89 void AppBannerManager::OnInfoBarDestroyed() {
87 weak_infobar_ptr_ = nullptr; 90 weak_infobar_ptr_ = nullptr;
88 } 91 }
89 92
90 bool AppBannerManager::OnButtonClicked() const { 93 bool AppBannerManager::OnButtonClicked() const {
91 if (!web_contents()) 94 if (!web_contents())
92 return true; 95 return true;
93 96
94 if (!web_app_data_.IsEmpty()) { 97 if (!web_app_data_.IsEmpty()) {
98 AppBannerSettingsHelper::RecordBannerEvent(
99 web_contents(), web_contents()->GetURL(),
100 web_app_data_.start_url.spec(),
101 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
102 base::Time::Now());
103
95 InstallManifestApp(web_app_data_, *app_icon_.get()); 104 InstallManifestApp(web_app_data_, *app_icon_.get());
96 return true; 105 return true;
97 } 106 }
98 107
99 return true; 108 return true;
100 } 109 }
101 110
102 base::string16 AppBannerManager::GetTitle() const { 111 base::string16 AppBannerManager::GetTitle() const {
103 return app_title_; 112 return app_title_;
104 } 113 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 // TODO(benwells): Check triggering parameters. 185 // TODO(benwells): Check triggering parameters.
177 // Create an infobar to promote the manifest's app. 186 // Create an infobar to promote the manifest's app.
178 GURL icon_url = 187 GURL icon_url =
179 ManifestIconSelector::FindBestMatchingIcon( 188 ManifestIconSelector::FindBestMatchingIcon(
180 web_app_data_.icons, 189 web_app_data_.icons,
181 GetPreferredIconSize(), 190 GetPreferredIconSize(),
182 gfx::Screen::GetScreenFor(web_contents()->GetNativeView())); 191 gfx::Screen::GetScreenFor(web_contents()->GetNativeView()));
183 if (icon_url.is_empty()) 192 if (icon_url.is_empty())
184 return; 193 return;
185 194
195 RecordCouldShowBanner(web_app_data_.start_url.spec());
196 if (!CheckIfShouldShow(web_app_data_.start_url.spec()))
197 return;
198
186 FetchIcon(icon_url); 199 FetchIcon(icon_url);
187 } 200 }
188 } 201 }
189 202
203 void AppBannerManager::RecordCouldShowBanner(
204 const std::string& package_or_start_url) {
205 AppBannerSettingsHelper::RecordBannerEvent(
206 web_contents(), validated_url_, package_or_start_url,
207 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, base::Time::Now());
208 }
209
210 bool AppBannerManager::CheckIfShouldShow(
211 const std::string& package_or_start_url) {
212 if (!AppBannerSettingsHelper::ShouldShowBanner(web_contents(), validated_url_,
213 package_or_start_url,
214 base::Time::Now())) {
215 return false;
216 }
217
218 AppBannerSettingsHelper::RecordBannerEvent(
219 web_contents(), validated_url_, package_or_start_url,
220 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, base::Time::Now());
221 return true;
222 }
223
190 bool AppBannerManager::OnMessageReceived(const IPC::Message& message) { 224 bool AppBannerManager::OnMessageReceived(const IPC::Message& message) {
191 bool handled = true; 225 bool handled = true;
192 IPC_BEGIN_MESSAGE_MAP(AppBannerManager, message) 226 IPC_BEGIN_MESSAGE_MAP(AppBannerManager, message)
193 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent, 227 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent,
194 OnDidRetrieveMetaTagContent) 228 OnDidRetrieveMetaTagContent)
195 IPC_MESSAGE_UNHANDLED(handled = false) 229 IPC_MESSAGE_UNHANDLED(handled = false)
196 IPC_END_MESSAGE_MAP() 230 IPC_END_MESSAGE_MAP()
197 return handled; 231 return handled;
198 } 232 }
199 233
(...skipping 30 matching lines...) Expand all
230 const std::string& tag_content, 264 const std::string& tag_content,
231 const GURL& expected_url) { 265 const GURL& expected_url) {
232 DCHECK(web_contents()); 266 DCHECK(web_contents());
233 if (!success || tag_name != kBannerTag || validated_url_ != expected_url || 267 if (!success || tag_name != kBannerTag || validated_url_ != expected_url ||
234 tag_content.size() >= chrome::kMaxMetaTagAttributeLength) { 268 tag_content.size() >= chrome::kMaxMetaTagAttributeLength) {
235 return; 269 return;
236 } 270 }
237 271
238 banners::TrackDisplayEvent(DISPLAY_BANNER_REQUESTED); 272 banners::TrackDisplayEvent(DISPLAY_BANNER_REQUESTED);
239 273
240 if (!AppBannerSettingsHelper::IsAllowed(web_contents(), 274 RecordCouldShowBanner(tag_content);
241 expected_url, 275 if (!CheckIfShouldShow(tag_content))
242 tag_content)) {
243 return; 276 return;
244 }
245 277
246 // Send the info to the Java side to get info about the app. 278 // Send the info to the Java side to get info about the app.
247 JNIEnv* env = base::android::AttachCurrentThread(); 279 JNIEnv* env = base::android::AttachCurrentThread();
248 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); 280 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
249 if (jobj.is_null()) 281 if (jobj.is_null())
250 return; 282 return;
251 283
252 ScopedJavaLocalRef<jstring> jurl( 284 ScopedJavaLocalRef<jstring> jurl(
253 ConvertUTF8ToJavaString(env, expected_url.spec())); 285 ConvertUTF8ToJavaString(env, expected_url.spec()));
254 ScopedJavaLocalRef<jstring> jpackage( 286 ScopedJavaLocalRef<jstring> jpackage(
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 return base::CommandLine::ForCurrentProcess()->HasSwitch( 355 return base::CommandLine::ForCurrentProcess()->HasSwitch(
324 switches::kEnableAppInstallAlerts); 356 switches::kEnableAppInstallAlerts);
325 } 357 }
326 358
327 // Register native methods 359 // Register native methods
328 bool RegisterAppBannerManager(JNIEnv* env) { 360 bool RegisterAppBannerManager(JNIEnv* env) {
329 return RegisterNativesImpl(env); 361 return RegisterNativesImpl(env);
330 } 362 }
331 363
332 } // namespace banners 364 } // namespace banners
OLDNEW
« no previous file with comments | « chrome/browser/android/banners/app_banner_manager.h ('k') | chrome/browser/banners/app_banner_settings_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698