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 |