OLD | NEW |
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 "chrome/browser/android/banners/app_banner_data_fetcher_android.h" | 9 #include "chrome/browser/android/banners/app_banner_data_fetcher_android.h" |
10 #include "chrome/browser/android/shortcut_helper.h" | 10 #include "chrome/browser/android/shortcut_helper.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 JNIEnv* env, | 49 JNIEnv* env, |
50 const JavaParamRef<jobject>& obj, | 50 const JavaParamRef<jobject>& obj, |
51 const JavaParamRef<jobject>& jweb_contents) { | 51 const JavaParamRef<jobject>& jweb_contents) { |
52 content::WebContents* web_contents = | 52 content::WebContents* web_contents = |
53 content::WebContents::FromJavaWebContents(jweb_contents); | 53 content::WebContents::FromJavaWebContents(jweb_contents); |
54 AppBannerManager::ReplaceWebContents(web_contents); | 54 AppBannerManager::ReplaceWebContents(web_contents); |
55 } | 55 } |
56 | 56 |
57 bool AppBannerManagerAndroid::HandleNonWebApp(const std::string& platform, | 57 bool AppBannerManagerAndroid::HandleNonWebApp(const std::string& platform, |
58 const GURL& url, | 58 const GURL& url, |
59 const std::string& id) { | 59 const std::string& id, |
60 if (!CheckPlatformAndId(platform, id)) | 60 bool is_debug_mode) { |
| 61 if (!CheckPlatformAndId(platform, id, is_debug_mode)) |
61 return false; | 62 return false; |
62 | 63 |
63 banners::TrackDisplayEvent(DISPLAY_EVENT_NATIVE_APP_BANNER_REQUESTED); | 64 banners::TrackDisplayEvent(DISPLAY_EVENT_NATIVE_APP_BANNER_REQUESTED); |
64 | 65 |
65 // Send the info to the Java side to get info about the app. | 66 // Send the info to the Java side to get info about the app. |
66 JNIEnv* env = base::android::AttachCurrentThread(); | 67 JNIEnv* env = base::android::AttachCurrentThread(); |
67 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); | 68 ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env); |
68 if (jobj.is_null()) | 69 if (jobj.is_null()) |
69 return false; | 70 return false; |
70 | 71 |
71 std::string id_from_app_url = ExtractQueryValueForName(url, kIdName); | 72 std::string id_from_app_url = ExtractQueryValueForName(url, kIdName); |
72 if (id_from_app_url.size() && id != id_from_app_url) { | 73 if (id_from_app_url.size() && id != id_from_app_url) { |
73 banners::OutputDeveloperDebugMessage(web_contents(), | 74 banners::OutputDeveloperDebugMessage( |
74 banners::kIgnoredIdsDoNotMatch); | 75 web_contents(), banners::kIgnoredIdsDoNotMatch, is_debug_mode); |
75 return false; | 76 return false; |
76 } | 77 } |
77 | 78 |
78 std::string referrer = | 79 std::string referrer = |
79 ExtractQueryValueForName(url, kReferrerName); | 80 ExtractQueryValueForName(url, kReferrerName); |
80 | 81 |
81 // Attach the chrome_inline referrer value, prefixed with "&" if the referrer | 82 // Attach the chrome_inline referrer value, prefixed with "&" if the referrer |
82 // is non empty. | 83 // is non empty. |
83 if (referrer.empty()) | 84 if (referrer.empty()) |
84 referrer = kPlayInlineReferrer; | 85 referrer = kPlayInlineReferrer; |
85 else | 86 else |
86 referrer.append("&").append(kPlayInlineReferrer); | 87 referrer.append("&").append(kPlayInlineReferrer); |
87 | 88 |
88 ScopedJavaLocalRef<jstring> jurl( | 89 ScopedJavaLocalRef<jstring> jurl( |
89 ConvertUTF8ToJavaString(env, data_fetcher()->validated_url().spec())); | 90 ConvertUTF8ToJavaString(env, data_fetcher()->validated_url().spec())); |
90 ScopedJavaLocalRef<jstring> jpackage( | 91 ScopedJavaLocalRef<jstring> jpackage( |
91 ConvertUTF8ToJavaString(env, id)); | 92 ConvertUTF8ToJavaString(env, id)); |
92 ScopedJavaLocalRef<jstring> jreferrer( | 93 ScopedJavaLocalRef<jstring> jreferrer( |
93 ConvertUTF8ToJavaString(env, referrer)); | 94 ConvertUTF8ToJavaString(env, referrer)); |
94 Java_AppBannerManager_fetchAppDetails( | 95 Java_AppBannerManager_fetchAppDetails( |
95 env, jobj.obj(), jurl.obj(), | 96 env, jobj.obj(), jurl.obj(), |
96 jpackage.obj(), jreferrer.obj(), | 97 jpackage.obj(), jreferrer.obj(), |
97 ShortcutHelper::GetIdealHomescreenIconSizeInDp()); | 98 ShortcutHelper::GetIdealHomescreenIconSizeInDp()); |
98 return true; | 99 return true; |
99 } | 100 } |
100 | 101 |
101 bool AppBannerManagerAndroid::CheckPlatformAndId(const std::string& platform, | 102 bool AppBannerManagerAndroid::CheckPlatformAndId(const std::string& platform, |
102 const std::string& id) { | 103 const std::string& id, |
| 104 bool is_debug_mode) { |
103 if (platform != kPlayPlatform) { | 105 if (platform != kPlayPlatform) { |
104 banners::OutputDeveloperDebugMessage( | 106 banners::OutputDeveloperDebugMessage( |
105 web_contents(), platform + banners::kIgnoredNotSupportedOnAndroid); | 107 web_contents(), platform + banners::kIgnoredNotSupportedOnAndroid, |
| 108 is_debug_mode); |
106 return false; | 109 return false; |
107 } | 110 } |
108 if (id.empty()) { | 111 if (id.empty()) { |
109 banners::OutputDeveloperDebugMessage(web_contents(), banners::kIgnoredNoId); | 112 banners::OutputDeveloperDebugMessage(web_contents(), banners::kIgnoredNoId, |
| 113 is_debug_mode); |
110 return false; | 114 return false; |
111 } | 115 } |
112 return true; | 116 return true; |
113 } | 117 } |
114 | 118 |
115 bool AppBannerManagerAndroid::CheckFetcherMatchesContents() { | 119 bool AppBannerManagerAndroid::CheckFetcherMatchesContents(bool is_debug_mode) { |
116 if (!web_contents()) | 120 if (!web_contents()) |
117 return false; | 121 return false; |
118 | 122 |
119 if (!data_fetcher() || | 123 if (!data_fetcher() || |
120 data_fetcher()->validated_url() != web_contents()->GetURL()) { | 124 data_fetcher()->validated_url() != web_contents()->GetURL()) { |
121 banners::OutputDeveloperNotShownMessage( | 125 banners::OutputDeveloperNotShownMessage( |
122 web_contents(), banners::kUserNavigatedBeforeBannerShown); | 126 web_contents(), banners::kUserNavigatedBeforeBannerShown, |
| 127 is_debug_mode); |
123 return false; | 128 return false; |
124 } | 129 } |
125 return true; | 130 return true; |
126 } | 131 } |
127 | 132 |
128 std::string AppBannerManagerAndroid::ExtractQueryValueForName( | 133 std::string AppBannerManagerAndroid::ExtractQueryValueForName( |
129 const GURL& url, | 134 const GURL& url, |
130 const std::string& name) { | 135 const std::string& name) { |
131 url::Component query = url.parsed_for_possibly_invalid_spec().query; | 136 url::Component query = url.parsed_for_possibly_invalid_spec().query; |
132 url::Component key, value; | 137 url::Component key, value; |
133 const char* url_spec = url.spec().c_str(); | 138 const char* url_spec = url.spec().c_str(); |
134 | 139 |
135 while (url::ExtractQueryKeyValue(url_spec, &query, &key, &value)) { | 140 while (url::ExtractQueryKeyValue(url_spec, &query, &key, &value)) { |
136 std::string key_str(url_spec, key.begin, key.len); | 141 std::string key_str(url_spec, key.begin, key.len); |
137 std::string value_str(url_spec, value.begin, value.len); | 142 std::string value_str(url_spec, value.begin, value.len); |
138 if (key_str == name) | 143 if (key_str == name) |
139 return value_str; | 144 return value_str; |
140 } | 145 } |
141 return ""; | 146 return ""; |
142 } | 147 } |
143 | 148 |
144 AppBannerDataFetcher* AppBannerManagerAndroid::CreateAppBannerDataFetcher( | 149 AppBannerDataFetcher* AppBannerManagerAndroid::CreateAppBannerDataFetcher( |
145 base::WeakPtr<Delegate> weak_delegate) { | 150 base::WeakPtr<Delegate> weak_delegate, |
| 151 bool is_debug_mode) { |
146 return new AppBannerDataFetcherAndroid( | 152 return new AppBannerDataFetcherAndroid( |
147 web_contents(), | 153 web_contents(), weak_delegate, |
148 weak_delegate, | |
149 ShortcutHelper::GetIdealHomescreenIconSizeInDp(), | 154 ShortcutHelper::GetIdealHomescreenIconSizeInDp(), |
150 ShortcutHelper::GetMinimumHomescreenIconSizeInDp(), | 155 ShortcutHelper::GetMinimumHomescreenIconSizeInDp(), |
151 ShortcutHelper::GetIdealSplashImageSizeInDp(), | 156 ShortcutHelper::GetIdealSplashImageSizeInDp(), |
152 ShortcutHelper::GetMinimumSplashImageSizeInDp()); | 157 ShortcutHelper::GetMinimumSplashImageSizeInDp(), is_debug_mode); |
153 } | 158 } |
154 | 159 |
155 bool AppBannerManagerAndroid::OnAppDetailsRetrieved( | 160 bool AppBannerManagerAndroid::OnAppDetailsRetrieved( |
156 JNIEnv* env, | 161 JNIEnv* env, |
157 const JavaParamRef<jobject>& obj, | 162 const JavaParamRef<jobject>& obj, |
158 const JavaParamRef<jobject>& japp_data, | 163 const JavaParamRef<jobject>& japp_data, |
159 const JavaParamRef<jstring>& japp_title, | 164 const JavaParamRef<jstring>& japp_title, |
160 const JavaParamRef<jstring>& japp_package, | 165 const JavaParamRef<jstring>& japp_package, |
161 const JavaParamRef<jstring>& jicon_url) { | 166 const JavaParamRef<jstring>& jicon_url) { |
162 if (!CheckFetcherMatchesContents()) | 167 AppBannerDataFetcherAndroid* android_fetcher = |
| 168 static_cast<AppBannerDataFetcherAndroid*>(data_fetcher().get()); |
| 169 if (!CheckFetcherMatchesContents(android_fetcher->is_debug_mode())) |
163 return false; | 170 return false; |
164 | 171 |
165 GURL image_url = GURL(ConvertJavaStringToUTF8(env, jicon_url)); | 172 GURL image_url = GURL(ConvertJavaStringToUTF8(env, jicon_url)); |
166 | 173 |
167 AppBannerDataFetcherAndroid* android_fetcher = | |
168 static_cast<AppBannerDataFetcherAndroid*>(data_fetcher().get()); | |
169 return android_fetcher->ContinueFetching( | 174 return android_fetcher->ContinueFetching( |
170 ConvertJavaStringToUTF16(env, japp_title), | 175 ConvertJavaStringToUTF16(env, japp_title), |
171 ConvertJavaStringToUTF8(env, japp_package), japp_data, image_url); | 176 ConvertJavaStringToUTF8(env, japp_package), japp_data, image_url); |
172 } | 177 } |
173 | 178 |
174 bool AppBannerManagerAndroid::IsFetcherActive( | 179 bool AppBannerManagerAndroid::IsFetcherActive( |
175 JNIEnv* env, | 180 JNIEnv* env, |
176 const JavaParamRef<jobject>& obj) { | 181 const JavaParamRef<jobject>& obj) { |
177 return AppBannerManager::IsFetcherActive(); | 182 return AppBannerManager::IsFetcherActive(); |
178 } | 183 } |
179 | 184 |
| 185 void AppBannerManagerAndroid::RequestAppBanner( |
| 186 JNIEnv* env, |
| 187 const JavaParamRef<jobject>& obj) { |
| 188 AppBannerManager::RequestAppBanner(web_contents()->GetMainFrame(), |
| 189 web_contents()->GetLastCommittedURL(), |
| 190 true); |
| 191 } |
| 192 |
180 // static | 193 // static |
181 bool AppBannerManagerAndroid::Register(JNIEnv* env) { | 194 bool AppBannerManagerAndroid::Register(JNIEnv* env) { |
182 return RegisterNativesImpl(env); | 195 return RegisterNativesImpl(env); |
183 } | 196 } |
184 | 197 |
185 jlong Init(JNIEnv* env, | 198 jlong Init(JNIEnv* env, |
186 const JavaParamRef<jobject>& obj) { | 199 const JavaParamRef<jobject>& obj) { |
187 AppBannerManagerAndroid* manager = new AppBannerManagerAndroid(env, obj); | 200 AppBannerManagerAndroid* manager = new AppBannerManagerAndroid(env, obj); |
188 return reinterpret_cast<intptr_t>(manager); | 201 return reinterpret_cast<intptr_t>(manager); |
189 } | 202 } |
(...skipping 11 matching lines...) Expand all Loading... |
201 | 214 |
202 void SetEngagementWeights(JNIEnv* env, | 215 void SetEngagementWeights(JNIEnv* env, |
203 const JavaParamRef<jclass>& clazz, | 216 const JavaParamRef<jclass>& clazz, |
204 jdouble direct_engagement, | 217 jdouble direct_engagement, |
205 jdouble indirect_engagement) { | 218 jdouble indirect_engagement) { |
206 AppBannerManager::SetEngagementWeights(direct_engagement, | 219 AppBannerManager::SetEngagementWeights(direct_engagement, |
207 indirect_engagement); | 220 indirect_engagement); |
208 } | 221 } |
209 | 222 |
210 } // namespace banners | 223 } // namespace banners |
OLD | NEW |