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

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

Issue 1092193004: Use related_applications manifest fields when showing native app banners (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_android.h" 5 #include "chrome/browser/android/banners/app_banner_manager_android.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/command_line.h" 9 #include "base/command_line.h"
10 #include "chrome/browser/android/banners/app_banner_data_fetcher_android.h" 10 #include "chrome/browser/android/banners/app_banner_data_fetcher_android.h"
11 #include "chrome/browser/banners/app_banner_metrics.h" 11 #include "chrome/browser/banners/app_banner_metrics.h"
12 #include "chrome/common/chrome_constants.h" 12 #include "chrome/common/chrome_constants.h"
13 #include "chrome/common/render_messages.h" 13 #include "chrome/common/render_messages.h"
14 #include "content/public/browser/web_contents.h" 14 #include "content/public/browser/web_contents.h"
15 #include "content/public/common/frame_navigate_params.h" 15 #include "content/public/common/frame_navigate_params.h"
16 #include "jni/AppBannerManager_jni.h" 16 #include "jni/AppBannerManager_jni.h"
17 17
18 using base::android::ConvertJavaStringToUTF8; 18 using base::android::ConvertJavaStringToUTF8;
19 using base::android::ConvertJavaStringToUTF16; 19 using base::android::ConvertJavaStringToUTF16;
20 using base::android::ConvertUTF8ToJavaString; 20 using base::android::ConvertUTF8ToJavaString;
21 using base::android::ConvertUTF16ToJavaString; 21 using base::android::ConvertUTF16ToJavaString;
22 22
23 namespace { 23 namespace {
24 const char kBannerTag[] = "google-play-id"; 24 const char kPlayPlatform[] = "play";
25 } // anonymous namespace 25 } // anonymous namespace
26 26
27 namespace banners { 27 namespace banners {
28 28
29 AppBannerManagerAndroid::AppBannerManagerAndroid(JNIEnv* env, 29 AppBannerManagerAndroid::AppBannerManagerAndroid(JNIEnv* env,
30 jobject obj, 30 jobject obj,
31 int icon_size) 31 int icon_size)
32 : AppBannerManager(icon_size), 32 : AppBannerManager(icon_size),
33 weak_java_banner_view_manager_(env, obj) { 33 weak_java_banner_view_manager_(env, obj) {
34 } 34 }
35 35
36 AppBannerManagerAndroid::~AppBannerManagerAndroid() { 36 AppBannerManagerAndroid::~AppBannerManagerAndroid() {
37 } 37 }
38 38
39 void AppBannerManagerAndroid::Destroy(JNIEnv* env, jobject obj) { 39 void AppBannerManagerAndroid::Destroy(JNIEnv* env, jobject obj) {
40 delete this; 40 delete this;
41 } 41 }
42 42
43 void AppBannerManagerAndroid::ReplaceWebContents(JNIEnv* env, 43 void AppBannerManagerAndroid::ReplaceWebContents(JNIEnv* env,
44 jobject obj, 44 jobject obj,
45 jobject jweb_contents) { 45 jobject jweb_contents) {
46 content::WebContents* web_contents = 46 content::WebContents* web_contents =
47 content::WebContents::FromJavaWebContents(jweb_contents); 47 content::WebContents::FromJavaWebContents(jweb_contents);
48 AppBannerManager::ReplaceWebContents(web_contents); 48 AppBannerManager::ReplaceWebContents(web_contents);
49 } 49 }
50 50
51 bool AppBannerManagerAndroid::OnMessageReceived( 51 bool AppBannerManagerAndroid::HandleNonWebApp(const std::string& platform,
52 const IPC::Message& message) { 52 const GURL& url,
53 bool handled = true; 53 const std::string& id) {
54 IPC_BEGIN_MESSAGE_MAP(AppBannerManagerAndroid, message) 54 if (platform != kPlayPlatform || id.empty())
55 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent,
56 OnDidRetrieveMetaTagContent)
57 IPC_MESSAGE_UNHANDLED(handled = false)
58 IPC_END_MESSAGE_MAP()
59 return handled;
60 }
61
62 bool AppBannerManagerAndroid::OnInvalidManifest(AppBannerDataFetcher* fetcher) {
63 DCHECK(data_fetcher() == fetcher);
64 if (web_contents()->IsBeingDestroyed()) {
65 return false; 55 return false;
66 }
67
68 Send(new ChromeViewMsg_RetrieveMetaTagContent(routing_id(),
69 fetcher->validated_url(),
70 kBannerTag));
71 return true;
72 }
73
74 AppBannerDataFetcher* AppBannerManagerAndroid::CreateAppBannerDataFetcher(
75 base::WeakPtr<Delegate> weak_delegate,
76 const int ideal_icon_size) {
77 return new AppBannerDataFetcherAndroid(web_contents(), weak_delegate,
78 ideal_icon_size);
79 }
80
81 void AppBannerManagerAndroid::OnDidRetrieveMetaTagContent(
82 bool success,
83 const std::string& tag_name,
84 const std::string& tag_content,
85 const GURL& expected_url) {
86 DCHECK(web_contents());
87 if (!success
88 || tag_name != kBannerTag
89 || !data_fetcher()
90 || data_fetcher()->validated_url() != expected_url
91 || tag_content.size() >= chrome::kMaxMetaTagAttributeLength) {
92 return;
93 }
94 56
95 banners::TrackDisplayEvent(DISPLAY_EVENT_BANNER_REQUESTED); 57 banners::TrackDisplayEvent(DISPLAY_EVENT_BANNER_REQUESTED);
96 58
97 // Send the info to the Java side to get info about the app. 59 // Send the info to the Java side to get info about the app.
98 JNIEnv* env = base::android::AttachCurrentThread(); 60 JNIEnv* env = base::android::AttachCurrentThread();
99 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); 61 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
100 if (jobj.is_null()) 62 if (jobj.is_null())
101 return; 63 return false;
102 64
103 ScopedJavaLocalRef<jstring> jurl( 65 ScopedJavaLocalRef<jstring> jurl(
104 ConvertUTF8ToJavaString(env, expected_url.spec())); 66 ConvertUTF8ToJavaString(env, data_fetcher()->validated_url().spec()));
105 ScopedJavaLocalRef<jstring> jpackage( 67 ScopedJavaLocalRef<jstring> jpackage(
106 ConvertUTF8ToJavaString(env, tag_content)); 68 ConvertUTF8ToJavaString(env, id));
107 Java_AppBannerManager_fetchAppDetails( 69 Java_AppBannerManager_fetchAppDetails(
108 env, jobj.obj(), jurl.obj(), jpackage.obj(), ideal_icon_size()); 70 env, jobj.obj(), jurl.obj(), jpackage.obj(), ideal_icon_size());
71 return true;
72 }
73
74 AppBannerDataFetcher* AppBannerManagerAndroid::CreateAppBannerDataFetcher(
75 base::WeakPtr<Delegate> weak_delegate,
76 const int ideal_icon_size) {
77 return new AppBannerDataFetcherAndroid(web_contents(), weak_delegate,
78 ideal_icon_size);
109 } 79 }
110 80
111 bool AppBannerManagerAndroid::OnAppDetailsRetrieved(JNIEnv* env, 81 bool AppBannerManagerAndroid::OnAppDetailsRetrieved(JNIEnv* env,
112 jobject obj, 82 jobject obj,
113 jobject japp_data, 83 jobject japp_data,
114 jstring japp_title, 84 jstring japp_title,
115 jstring japp_package, 85 jstring japp_package,
116 jstring jicon_url) { 86 jstring jicon_url) {
117 if (!data_fetcher() || !web_contents() 87 if (!data_fetcher() || !web_contents()
118 || data_fetcher()->validated_url() != web_contents()->GetURL()) { 88 || data_fetcher()->validated_url() != web_contents()->GetURL()) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 122
153 void DisableSecureSchemeCheckForTesting(JNIEnv* env, jclass clazz) { 123 void DisableSecureSchemeCheckForTesting(JNIEnv* env, jclass clazz) {
154 AppBannerManager::DisableSecureSchemeCheckForTesting(); 124 AppBannerManager::DisableSecureSchemeCheckForTesting();
155 } 125 }
156 126
157 jboolean IsEnabled(JNIEnv* env, jclass clazz) { 127 jboolean IsEnabled(JNIEnv* env, jclass clazz) {
158 return AppBannerManager::IsEnabled(); 128 return AppBannerManager::IsEnabled();
159 } 129 }
160 130
161 } // namespace banners 131 } // namespace banners
OLDNEW
« no previous file with comments | « chrome/browser/android/banners/app_banner_manager_android.h ('k') | chrome/browser/banners/app_banner_data_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698