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

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

Issue 1569893003: Add "Request app banner" context menu in DevTools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: incorporated pfeldman's comment Created 4 years, 11 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 "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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698