OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "mojo/shell/standalone/android/android_handler.h" | 5 #include "mojo/shell/standalone/android/android_handler.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/android/context_utils.h" | 10 #include "base/android/context_utils.h" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 // .mojo file. | 80 // .mojo file. |
81 bool IsCachedApp(JNIEnv* env, | 81 bool IsCachedApp(JNIEnv* env, |
82 const GURL& url, | 82 const GURL& url, |
83 base::FilePath* app_dir, | 83 base::FilePath* app_dir, |
84 base::FilePath* path_to_mojo) { | 84 base::FilePath* path_to_mojo) { |
85 ScopedJavaLocalRef<jstring> j_cached_apps_dir = | 85 ScopedJavaLocalRef<jstring> j_cached_apps_dir = |
86 Java_AndroidHandler_getCachedAppsDir(env, GetApplicationContext()); | 86 Java_AndroidHandler_getCachedAppsDir(env, GetApplicationContext()); |
87 const base::FilePath cached_apps_fp( | 87 const base::FilePath cached_apps_fp( |
88 ConvertJavaStringToUTF8(env, j_cached_apps_dir.obj())); | 88 ConvertJavaStringToUTF8(env, j_cached_apps_dir.obj())); |
89 const std::string cached_apps(util::FilePathToFileURL(cached_apps_fp).spec()); | 89 const std::string cached_apps(util::FilePathToFileURL(cached_apps_fp).spec()); |
90 const std::string response_url(GURL(url).spec()); | 90 const std::string response_url(url.spec()); |
91 if (response_url.size() <= cached_apps.size() || | 91 if (response_url.size() <= cached_apps.size() || |
92 cached_apps.compare(0u, cached_apps.size(), response_url, 0u, | 92 cached_apps.compare(0u, cached_apps.size(), response_url, 0u, |
93 cached_apps.size()) != 0) { | 93 cached_apps.size()) != 0) { |
94 return false; | 94 return false; |
95 } | 95 } |
96 | 96 |
97 const std::string mojo_suffix(".mojo"); | 97 const std::string mojo_suffix(".mojo"); |
98 // app_rel_path is either something like html_viewer/html_viewer.mojo, or | 98 // app_rel_path is either something like html_viewer/html_viewer.mojo, or |
99 // html_viewer.mojo, depending upon whether the app has a package. | 99 // html_viewer.mojo, depending upon whether the app has a package. |
100 const std::string app_rel_path(response_url.substr(cached_apps.size() + 1)); | 100 const std::string app_rel_path(response_url.substr(cached_apps.size() + 1)); |
(...skipping 20 matching lines...) Expand all Loading... |
121 } | 121 } |
122 | 122 |
123 *app_dir = cached_apps_fp.Append( | 123 *app_dir = cached_apps_fp.Append( |
124 app_rel_path.substr(0, app_rel_path.size() - mojo_suffix.size())); | 124 app_rel_path.substr(0, app_rel_path.size() - mojo_suffix.size())); |
125 *path_to_mojo = cached_apps_fp.Append(app_rel_path); | 125 *path_to_mojo = cached_apps_fp.Append(app_rel_path); |
126 return true; | 126 return true; |
127 } | 127 } |
128 | 128 |
129 } // namespace | 129 } // namespace |
130 | 130 |
131 AndroidHandler::AndroidHandler() : content_handler_factory_(this) {} | 131 AndroidHandler::AndroidHandler() : shell_client_factory_(this) {} |
132 | 132 |
133 AndroidHandler::~AndroidHandler() {} | 133 AndroidHandler::~AndroidHandler() {} |
134 | 134 |
135 void AndroidHandler::RunApplication( | 135 void AndroidHandler::CreateShellClient(mojom::ShellClientRequest request, |
136 InterfaceRequest<mojom::ShellClient> request, | 136 const GURL& url) { |
137 URLResponsePtr response) { | |
138 JNIEnv* env = AttachCurrentThread(); | 137 JNIEnv* env = AttachCurrentThread(); |
139 RunAndroidApplicationFn run_android_application_fn = &RunAndroidApplication; | 138 RunAndroidApplicationFn run_android_application_fn = &RunAndroidApplication; |
140 if (!response->url.is_null()) { | 139 base::FilePath internal_app_path; |
141 base::FilePath internal_app_path; | 140 base::FilePath path_to_mojo; |
142 base::FilePath path_to_mojo; | 141 if (IsCachedApp(env, url, &internal_app_path, &path_to_mojo)) { |
143 if (IsCachedApp(env, GURL(response->url.get()), &internal_app_path, | 142 ScopedJavaLocalRef<jstring> j_internal_app_path( |
144 &path_to_mojo)) { | 143 ConvertUTF8ToJavaString(env, internal_app_path.value())); |
145 ScopedJavaLocalRef<jstring> j_internal_app_path( | 144 ScopedJavaLocalRef<jstring> j_path_to_mojo( |
146 ConvertUTF8ToJavaString(env, internal_app_path.value())); | 145 ConvertUTF8ToJavaString(env, path_to_mojo.value())); |
147 ScopedJavaLocalRef<jstring> j_path_to_mojo( | 146 Java_AndroidHandler_bootstrapCachedApp( |
148 ConvertUTF8ToJavaString(env, path_to_mojo.value())); | 147 env, GetApplicationContext(), j_path_to_mojo.obj(), |
149 Java_AndroidHandler_bootstrapCachedApp( | 148 j_internal_app_path.obj(), |
150 env, GetApplicationContext(), j_path_to_mojo.obj(), | 149 request.PassMessagePipe().release().value(), |
151 j_internal_app_path.obj(), | 150 reinterpret_cast<jlong>(run_android_application_fn)); |
152 request.PassMessagePipe().release().value(), | 151 return; |
153 reinterpret_cast<jlong>(run_android_application_fn)); | |
154 return; | |
155 } | |
156 } | 152 } |
157 ScopedJavaLocalRef<jstring> j_archive_path = | 153 ScopedJavaLocalRef<jstring> j_archive_path = |
158 Java_AndroidHandler_getNewTempArchivePath(env, GetApplicationContext()); | 154 Java_AndroidHandler_getNewTempArchivePath(env, GetApplicationContext()); |
159 base::FilePath archive_path( | 155 base::FilePath archive_path( |
160 ConvertJavaStringToUTF8(env, j_archive_path.obj())); | 156 ConvertJavaStringToUTF8(env, j_archive_path.obj())); |
161 | 157 |
162 common::BlockingCopyToFile(std::move(response->body), archive_path); | 158 // TODO(beng): fix or remove. |
| 159 //common::BlockingCopyToFile(std::move(response->body), archive_path); |
163 Java_AndroidHandler_bootstrap( | 160 Java_AndroidHandler_bootstrap( |
164 env, GetApplicationContext(), j_archive_path.obj(), | 161 env, GetApplicationContext(), j_archive_path.obj(), |
165 request.PassMessagePipe().release().value(), | 162 request.PassMessagePipe().release().value(), |
166 reinterpret_cast<jlong>(run_android_application_fn)); | 163 reinterpret_cast<jlong>(run_android_application_fn)); |
167 } | 164 } |
168 | 165 |
169 void AndroidHandler::Initialize(Shell* shell, | 166 void AndroidHandler::Initialize(Shell* shell, |
170 const std::string& url, | 167 const std::string& url, |
171 uint32_t id) {} | 168 uint32_t id) {} |
172 | 169 |
173 bool AndroidHandler::AcceptConnection(Connection* connection) { | 170 bool AndroidHandler::AcceptConnection(Connection* connection) { |
174 connection->AddInterface(&content_handler_factory_); | 171 connection->AddInterface(&shell_client_factory_); |
175 return true; | 172 return true; |
176 } | 173 } |
177 | 174 |
178 bool RegisterAndroidHandlerJni(JNIEnv* env) { | 175 bool RegisterAndroidHandlerJni(JNIEnv* env) { |
179 return RegisterNativesImpl(env); | 176 return RegisterNativesImpl(env); |
180 } | 177 } |
181 | 178 |
182 } // namespace shell | 179 } // namespace shell |
183 } // namespace mojo | 180 } // namespace mojo |
OLD | NEW |