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

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

Issue 871103004: Allow installing apps via the AppBannerInfoBar (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pointers
Patch Set: Fix compile 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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 } 92 }
93 93
94 void AppBannerManager::OnInfoBarDestroyed() { 94 void AppBannerManager::OnInfoBarDestroyed() {
95 weak_infobar_ptr_ = nullptr; 95 weak_infobar_ptr_ = nullptr;
96 } 96 }
97 97
98 bool AppBannerManager::OnButtonClicked() const { 98 bool AppBannerManager::OnButtonClicked() const {
99 if (!web_contents()) 99 if (!web_contents())
100 return true; 100 return true;
101 101
102 if (!web_app_data_.IsEmpty()) { 102 if (!native_app_data_.is_null()) {
103 JNIEnv* env = base::android::AttachCurrentThread();
104 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
105 if (jobj.is_null())
106 return true;
107
108 return Java_AppBannerManager_installOrOpenNativeApp(env,
109 jobj.obj(),
110 native_app_data_.obj());
111 } else if (!web_app_data_.IsEmpty()) {
103 AppBannerSettingsHelper::RecordBannerEvent( 112 AppBannerSettingsHelper::RecordBannerEvent(
104 web_contents(), web_contents()->GetURL(), 113 web_contents(), web_contents()->GetURL(),
105 web_app_data_.start_url.spec(), 114 web_app_data_.start_url.spec(),
106 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, 115 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
107 base::Time::Now()); 116 base::Time::Now());
108 117
109 InstallManifestApp(web_app_data_, *app_icon_.get()); 118 InstallManifestApp(web_app_data_, *app_icon_.get());
110 return true; 119 return true;
111 } 120 }
112 121
113 return true; 122 return true;
114 } 123 }
115 124
125 bool AppBannerManager::OnLinkClicked() const {
126 if (!web_contents())
127 return true;
128
129 if (!native_app_data_.is_null()) {
130 // Try to show the details for the native app.
131 JNIEnv* env = base::android::AttachCurrentThread();
132 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
133 if (jobj.is_null())
134 return true;
135
136 Java_AppBannerManager_showAppDetails(env,
137 jobj.obj(),
138 native_app_data_.obj());
139 return true;
140 } else {
141 // Nothing should happen if the user is installing a web app.
142 return false;
143 }
144 }
145
116 base::string16 AppBannerManager::GetTitle() const { 146 base::string16 AppBannerManager::GetTitle() const {
117 return app_title_; 147 return app_title_;
118 } 148 }
119 149
120 gfx::Image AppBannerManager::GetIcon() const { 150 gfx::Image AppBannerManager::GetIcon() const {
121 return gfx::Image::CreateFrom1xBitmap(*app_icon_.get()); 151 return gfx::Image::CreateFrom1xBitmap(*app_icon_.get());
122 } 152 }
123 153
124 void AppBannerManager::ReplaceWebContents(JNIEnv* env, 154 void AppBannerManager::ReplaceWebContents(JNIEnv* env,
125 jobject obj, 155 jobject obj,
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 if (validated_url_ != web_contents()->GetURL()) 342 if (validated_url_ != web_contents()->GetURL())
313 return false; 343 return false;
314 344
315 std::string image_url = ConvertJavaStringToUTF8(env, jicon_url); 345 std::string image_url = ConvertJavaStringToUTF8(env, jicon_url);
316 app_title_ = ConvertJavaStringToUTF16(env, japp_title); 346 app_title_ = ConvertJavaStringToUTF16(env, japp_title);
317 native_app_package_ = ConvertJavaStringToUTF8(env, japp_package); 347 native_app_package_ = ConvertJavaStringToUTF8(env, japp_package);
318 native_app_data_.Reset(env, japp_data); 348 native_app_data_.Reset(env, japp_data);
319 return FetchIcon(GURL(image_url)); 349 return FetchIcon(GURL(image_url));
320 } 350 }
321 351
352 void AppBannerManager::OnInstallIntentReturned(JNIEnv* env,
353 jobject obj,
354 jboolean jis_installing) {
355 if (!weak_infobar_ptr_)
356 return;
357
358 if (jis_installing) {
359 AppBannerSettingsHelper::RecordBannerEvent(
360 web_contents(),
361 web_contents()->GetURL(),
362 native_app_package_,
363 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
364 base::Time::Now());
365 }
366
367 UpdateInstallState(env, obj);
368 }
369
370 void AppBannerManager::OnInstallFinished(JNIEnv* env,
371 jobject obj,
372 jboolean success) {
373 if (!weak_infobar_ptr_)
374 return;
375
376 if (success) {
377 UpdateInstallState(env, obj);
378 } else {
379 InfoBarService* service = InfoBarService::FromWebContents(web_contents());
380 service->RemoveInfoBar(weak_infobar_ptr_);
381 }
382 }
383
384 void AppBannerManager::UpdateInstallState(JNIEnv* env, jobject obj) {
385 if (!weak_infobar_ptr_ || native_app_data_.is_null())
386 return;
387
388 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
389 if (jobj.is_null())
390 return;
391
392 int newState = Java_AppBannerManager_determineInstallState(
393 env,
394 jobj.obj(),
395 native_app_data_.obj());
396 weak_infobar_ptr_->OnInstallStateChanged(newState);
397 }
398
322 bool AppBannerManager::FetchIcon(const GURL& image_url) { 399 bool AppBannerManager::FetchIcon(const GURL& image_url) {
323 if (!web_contents()) 400 if (!web_contents())
324 return false; 401 return false;
325 402
326 // Begin asynchronously fetching the app icon. 403 // Begin asynchronously fetching the app icon.
327 Profile* profile = 404 Profile* profile =
328 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 405 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
329 fetcher_.reset(new chrome::BitmapFetcher(image_url, this)); 406 fetcher_.reset(new chrome::BitmapFetcher(image_url, this));
330 fetcher_.get()->Start( 407 fetcher_.get()->Start(
331 profile->GetRequestContext(), 408 profile->GetRequestContext(),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 return base::CommandLine::ForCurrentProcess()->HasSwitch( 453 return base::CommandLine::ForCurrentProcess()->HasSwitch(
377 switches::kEnableAppInstallAlerts); 454 switches::kEnableAppInstallAlerts);
378 } 455 }
379 456
380 // Register native methods 457 // Register native methods
381 bool RegisterAppBannerManager(JNIEnv* env) { 458 bool RegisterAppBannerManager(JNIEnv* env) {
382 return RegisterNativesImpl(env); 459 return RegisterNativesImpl(env);
383 } 460 }
384 461
385 } // namespace banners 462 } // namespace banners
OLDNEW
« no previous file with comments | « chrome/browser/android/banners/app_banner_manager.h ('k') | chrome/browser/ui/android/infobars/app_banner_infobar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698