| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/shortcut_helper.h" | 5 #include "chrome/browser/android/shortcut_helper.h" |
| 6 | 6 |
| 7 #include <jni.h> | 7 #include <jni.h> |
| 8 | 8 |
| 9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 return reinterpret_cast<intptr_t>(shortcut_helper); | 41 return reinterpret_cast<intptr_t>(shortcut_helper); |
| 42 } | 42 } |
| 43 | 43 |
| 44 ShortcutHelper::ShortcutHelper(JNIEnv* env, | 44 ShortcutHelper::ShortcutHelper(JNIEnv* env, |
| 45 jobject obj, | 45 jobject obj, |
| 46 content::WebContents* web_contents) | 46 content::WebContents* web_contents) |
| 47 : WebContentsObserver(web_contents), | 47 : WebContentsObserver(web_contents), |
| 48 java_ref_(env, obj), | 48 java_ref_(env, obj), |
| 49 url_(web_contents->GetURL()), | 49 url_(web_contents->GetURL()), |
| 50 display_(content::Manifest::DISPLAY_MODE_BROWSER), | 50 display_(content::Manifest::DISPLAY_MODE_BROWSER), |
| 51 orientation_(blink::WebScreenOrientationLockDefault), |
| 51 weak_ptr_factory_(this) { | 52 weak_ptr_factory_(this) { |
| 52 } | 53 } |
| 53 | 54 |
| 54 void ShortcutHelper::Initialize() { | 55 void ShortcutHelper::Initialize() { |
| 55 // Send a message to the renderer to retrieve information about the page. | 56 // Send a message to the renderer to retrieve information about the page. |
| 56 Send(new ChromeViewMsg_GetWebApplicationInfo(routing_id())); | 57 Send(new ChromeViewMsg_GetWebApplicationInfo(routing_id())); |
| 57 } | 58 } |
| 58 | 59 |
| 59 ShortcutHelper::~ShortcutHelper() { | 60 ShortcutHelper::~ShortcutHelper() { |
| 60 } | 61 } |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 if (manifest.display != content::Manifest::DISPLAY_MODE_UNSPECIFIED) | 112 if (manifest.display != content::Manifest::DISPLAY_MODE_UNSPECIFIED) |
| 112 display_ = manifest.display; | 113 display_ = manifest.display; |
| 113 | 114 |
| 114 // 'fullscreen' and 'minimal-ui' are not yet supported, fallback to the right | 115 // 'fullscreen' and 'minimal-ui' are not yet supported, fallback to the right |
| 115 // mode in those cases. | 116 // mode in those cases. |
| 116 if (manifest.display == content::Manifest::DISPLAY_MODE_FULLSCREEN) | 117 if (manifest.display == content::Manifest::DISPLAY_MODE_FULLSCREEN) |
| 117 display_ = content::Manifest::DISPLAY_MODE_STANDALONE; | 118 display_ = content::Manifest::DISPLAY_MODE_STANDALONE; |
| 118 if (manifest.display == content::Manifest::DISPLAY_MODE_MINIMAL_UI) | 119 if (manifest.display == content::Manifest::DISPLAY_MODE_MINIMAL_UI) |
| 119 display_ = content::Manifest::DISPLAY_MODE_BROWSER; | 120 display_ = content::Manifest::DISPLAY_MODE_BROWSER; |
| 120 | 121 |
| 122 // Set the orientation based on the manifest value, if any. |
| 123 if (manifest.orientation != blink::WebScreenOrientationLockDefault) { |
| 124 // Ignore the orientation if the display mode is different from |
| 125 // 'standalone'. |
| 126 // TODO(mlamouri): send a message to the developer console about this. |
| 127 if (display_ == content::Manifest::DISPLAY_MODE_STANDALONE) |
| 128 orientation_ = manifest.orientation; |
| 129 } |
| 130 |
| 121 // The ShortcutHelper is now able to notify its Java counterpart that it is | 131 // The ShortcutHelper is now able to notify its Java counterpart that it is |
| 122 // initialized. OnInitialized method is not conceptually part of getting the | 132 // initialized. OnInitialized method is not conceptually part of getting the |
| 123 // manifest data but it happens that the initialization is finalized when | 133 // manifest data but it happens that the initialization is finalized when |
| 124 // these data are available. | 134 // these data are available. |
| 125 JNIEnv* env = base::android::AttachCurrentThread(); | 135 JNIEnv* env = base::android::AttachCurrentThread(); |
| 126 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 136 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 127 ScopedJavaLocalRef<jstring> j_title = | 137 ScopedJavaLocalRef<jstring> j_title = |
| 128 base::android::ConvertUTF16ToJavaString(env, title_); | 138 base::android::ConvertUTF16ToJavaString(env, title_); |
| 129 | 139 |
| 130 Java_ShortcutHelper_onInitialized(env, j_obj.obj(), j_title.obj()); | 140 Java_ShortcutHelper_onInitialized(env, j_obj.obj(), j_title.obj()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 | 186 |
| 177 // Stop observing so we don't get destroyed while doing the last steps. | 187 // Stop observing so we don't get destroyed while doing the last steps. |
| 178 Observe(NULL); | 188 Observe(NULL); |
| 179 | 189 |
| 180 base::WorkerPool::PostTask( | 190 base::WorkerPool::PostTask( |
| 181 FROM_HERE, | 191 FROM_HERE, |
| 182 base::Bind(&ShortcutHelper::AddShortcutInBackground, | 192 base::Bind(&ShortcutHelper::AddShortcutInBackground, |
| 183 url_, | 193 url_, |
| 184 title_, | 194 title_, |
| 185 display_, | 195 display_, |
| 186 icon_), | 196 icon_, |
| 197 orientation_), |
| 187 true); | 198 true); |
| 188 | 199 |
| 189 Destroy(); | 200 Destroy(); |
| 190 } | 201 } |
| 191 | 202 |
| 192 bool ShortcutHelper::OnMessageReceived(const IPC::Message& message) { | 203 bool ShortcutHelper::OnMessageReceived(const IPC::Message& message) { |
| 193 bool handled = true; | 204 bool handled = true; |
| 194 | 205 |
| 195 IPC_BEGIN_MESSAGE_MAP(ShortcutHelper, message) | 206 IPC_BEGIN_MESSAGE_MAP(ShortcutHelper, message) |
| 196 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidGetWebApplicationInfo, | 207 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidGetWebApplicationInfo, |
| 197 OnDidGetWebApplicationInfo) | 208 OnDidGetWebApplicationInfo) |
| 198 IPC_MESSAGE_UNHANDLED(handled = false) | 209 IPC_MESSAGE_UNHANDLED(handled = false) |
| 199 IPC_END_MESSAGE_MAP() | 210 IPC_END_MESSAGE_MAP() |
| 200 | 211 |
| 201 return handled; | 212 return handled; |
| 202 } | 213 } |
| 203 | 214 |
| 204 void ShortcutHelper::WebContentsDestroyed() { | 215 void ShortcutHelper::WebContentsDestroyed() { |
| 205 Destroy(); | 216 Destroy(); |
| 206 } | 217 } |
| 207 | 218 |
| 208 bool ShortcutHelper::RegisterShortcutHelper(JNIEnv* env) { | 219 bool ShortcutHelper::RegisterShortcutHelper(JNIEnv* env) { |
| 209 return RegisterNativesImpl(env); | 220 return RegisterNativesImpl(env); |
| 210 } | 221 } |
| 211 | 222 |
| 212 void ShortcutHelper::AddShortcutInBackground( | 223 void ShortcutHelper::AddShortcutInBackground( |
| 213 const GURL& url, | 224 const GURL& url, |
| 214 const base::string16& title, | 225 const base::string16& title, |
| 215 content::Manifest::DisplayMode display, | 226 content::Manifest::DisplayMode display, |
| 216 const favicon_base::FaviconRawBitmapResult& bitmap_result) { | 227 const favicon_base::FaviconRawBitmapResult& bitmap_result, |
| 228 blink::WebScreenOrientationLockType orientation) { |
| 217 DCHECK(base::WorkerPool::RunsTasksOnCurrentThread()); | 229 DCHECK(base::WorkerPool::RunsTasksOnCurrentThread()); |
| 218 | 230 |
| 219 // Grab the average color from the bitmap. | 231 // Grab the average color from the bitmap. |
| 220 SkColor color = SK_ColorWHITE; | 232 SkColor color = SK_ColorWHITE; |
| 221 SkBitmap favicon_bitmap; | 233 SkBitmap favicon_bitmap; |
| 222 if (bitmap_result.is_valid()) { | 234 if (bitmap_result.is_valid()) { |
| 223 if (gfx::PNGCodec::Decode(bitmap_result.bitmap_data->front(), | 235 if (gfx::PNGCodec::Decode(bitmap_result.bitmap_data->front(), |
| 224 bitmap_result.bitmap_data->size(), | 236 bitmap_result.bitmap_data->size(), |
| 225 &favicon_bitmap)) | 237 &favicon_bitmap)) |
| 226 color = color_utils::CalculateKMeanColorOfBitmap(favicon_bitmap); | 238 color = color_utils::CalculateKMeanColorOfBitmap(favicon_bitmap); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 242 | 254 |
| 243 Java_ShortcutHelper_addShortcut( | 255 Java_ShortcutHelper_addShortcut( |
| 244 env, | 256 env, |
| 245 base::android::GetApplicationContext(), | 257 base::android::GetApplicationContext(), |
| 246 java_url.obj(), | 258 java_url.obj(), |
| 247 java_title.obj(), | 259 java_title.obj(), |
| 248 java_bitmap.obj(), | 260 java_bitmap.obj(), |
| 249 r_value, | 261 r_value, |
| 250 g_value, | 262 g_value, |
| 251 b_value, | 263 b_value, |
| 252 display == content::Manifest::DISPLAY_MODE_STANDALONE); | 264 display == content::Manifest::DISPLAY_MODE_STANDALONE, |
| 265 orientation); |
| 253 } | 266 } |
| OLD | NEW |