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

Side by Side Diff: chrome/browser/prerender/external_prerender_handler_android.cc

Issue 1710853002: android: Add a method to let Java know whether a prerender has finished loading. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 10 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 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/prerender/external_prerender_handler_android.h" 5 #include "chrome/browser/prerender/external_prerender_handler_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/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/browser/browser_process.h" 11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/prerender/prerender_handle.h" 12 #include "chrome/browser/prerender/prerender_handle.h"
13 #include "chrome/browser/prerender/prerender_manager.h" 13 #include "chrome/browser/prerender/prerender_manager.h"
14 #include "chrome/browser/prerender/prerender_manager_factory.h" 14 #include "chrome/browser/prerender/prerender_manager_factory.h"
15 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/profiles/profile_android.h" 16 #include "chrome/browser/profiles/profile_android.h"
17 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
18 18
19 #include "jni/ExternalPrerenderHandler_jni.h" 19 #include "jni/ExternalPrerenderHandler_jni.h"
20 20
21 using base::android::ConvertJavaStringToUTF16; 21 using base::android::ConvertJavaStringToUTF16;
22 22
23 namespace prerender { 23 namespace prerender {
24 24
25 namespace {
26
27 static bool ConvertParams(JNIEnv* env,
Yusuf 2016/02/22 22:11:31 maybe a better name for this as we don't convert a
Benoit L 2016/02/25 16:03:21 Done.
28 const JavaParamRef<jobject>& jprofile,
29 const JavaParamRef<jstring>& jurl,
30 const JavaParamRef<jobject>& jweb_contents,
31 GURL* url,
32 prerender::PrerenderManager** prerender_manager,
33 content::WebContents** web_contents) {
34 if (jurl == NULL)
35 return false;
36 *url = GURL(ConvertJavaStringToUTF16(env, jurl));
37 if (!url->is_valid())
38 return false;
39
40 Profile* profile = ProfileAndroid::FromProfileAndroid(jprofile);
41 *prerender_manager =
42 prerender::PrerenderManagerFactory::GetForProfile(profile);
43 if (!*prerender_manager)
44 return false;
45 *web_contents = content::WebContents::FromJavaWebContents(jweb_contents);
46 return true;
47 }
48
49 } // namespace
50
25 bool ExternalPrerenderHandlerAndroid::AddPrerender( 51 bool ExternalPrerenderHandlerAndroid::AddPrerender(
26 JNIEnv* env, 52 JNIEnv* env,
27 const JavaParamRef<jobject>& obj, 53 const JavaParamRef<jobject>& obj,
28 const JavaParamRef<jobject>& jprofile, 54 const JavaParamRef<jobject>& jprofile,
29 const JavaParamRef<jobject>& jweb_contents, 55 const JavaParamRef<jobject>& jweb_contents,
30 const JavaParamRef<jstring>& jurl, 56 const JavaParamRef<jstring>& jurl,
31 const JavaParamRef<jstring>& jreferrer, 57 const JavaParamRef<jstring>& jreferrer,
32 jint width, 58 jint width,
33 jint height) { 59 jint height) {
34 Profile* profile = ProfileAndroid::FromProfileAndroid(jprofile); 60 Profile* profile = ProfileAndroid::FromProfileAndroid(jprofile);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 return; 94 return;
69 prerender_handle_->OnCancel(); 95 prerender_handle_->OnCancel();
70 prerender_handle_.reset(); 96 prerender_handle_.reset();
71 } 97 }
72 98
73 static jboolean HasPrerenderedUrl(JNIEnv* env, 99 static jboolean HasPrerenderedUrl(JNIEnv* env,
74 const JavaParamRef<jclass>& clazz, 100 const JavaParamRef<jclass>& clazz,
75 const JavaParamRef<jobject>& jprofile, 101 const JavaParamRef<jobject>& jprofile,
76 const JavaParamRef<jstring>& jurl, 102 const JavaParamRef<jstring>& jurl,
77 const JavaParamRef<jobject>& jweb_contents) { 103 const JavaParamRef<jobject>& jweb_contents) {
78 if (jurl == NULL) 104 GURL url;
105 prerender::PrerenderManager* prerender_manager;
106 content::WebContents* web_contents;
107 if (!ConvertParams(env, jprofile, jurl, jweb_contents, &url,
108 &prerender_manager, &web_contents))
79 return false; 109 return false;
80
81 Profile* profile = ProfileAndroid::FromProfileAndroid(jprofile);
82 GURL url = GURL(ConvertJavaStringToUTF16(env, jurl));
83 if (!url.is_valid())
84 return false;
85 prerender::PrerenderManager* prerender_manager =
86 prerender::PrerenderManagerFactory::GetForProfile(profile);
87 if (!prerender_manager)
88 return false;
89 content::WebContents* web_contents =
90 content::WebContents::FromJavaWebContents(jweb_contents);
91 return prerender_manager->HasPrerenderedUrl(url, web_contents); 110 return prerender_manager->HasPrerenderedUrl(url, web_contents);
92 } 111 }
93 112
113 static jboolean HasPrerenderedAndFinishedLoadingUrl(
114 JNIEnv* env,
115 const JavaParamRef<jclass>& clazz,
116 const JavaParamRef<jobject>& jprofile,
117 const JavaParamRef<jstring>& jurl,
118 const JavaParamRef<jobject>& jweb_contents) {
119 GURL url;
120 prerender::PrerenderManager* prerender_manager;
121 content::WebContents* web_contents;
122 if (!ConvertParams(env, jprofile, jurl, jweb_contents, &url,
123 &prerender_manager, &web_contents))
124 return false;
125 return prerender_manager->HasPrerenderedAndFinishedLoadingUrl(url,
126 web_contents);
127 }
128
94 ExternalPrerenderHandlerAndroid::ExternalPrerenderHandlerAndroid() {} 129 ExternalPrerenderHandlerAndroid::ExternalPrerenderHandlerAndroid() {}
95 130
96 ExternalPrerenderHandlerAndroid::~ExternalPrerenderHandlerAndroid() {} 131 ExternalPrerenderHandlerAndroid::~ExternalPrerenderHandlerAndroid() {}
97 132
98 static jlong Init(JNIEnv* env, const JavaParamRef<jclass>& clazz) { 133 static jlong Init(JNIEnv* env, const JavaParamRef<jclass>& clazz) {
99 ExternalPrerenderHandlerAndroid* external_handler = 134 ExternalPrerenderHandlerAndroid* external_handler =
100 new ExternalPrerenderHandlerAndroid(); 135 new ExternalPrerenderHandlerAndroid();
101 return reinterpret_cast<intptr_t>(external_handler); 136 return reinterpret_cast<intptr_t>(external_handler);
102 } 137 }
103 138
104 bool ExternalPrerenderHandlerAndroid::RegisterExternalPrerenderHandlerAndroid( 139 bool ExternalPrerenderHandlerAndroid::RegisterExternalPrerenderHandlerAndroid(
105 JNIEnv* env) { 140 JNIEnv* env) {
106 return RegisterNativesImpl(env); 141 return RegisterNativesImpl(env);
107 } 142 }
108 143
109 } // namespace prerender 144 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698