| 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 "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 Loading... |
| 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 |
| OLD | NEW |