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/runner/android/android_handler.h" | 5 #include "mojo/runner/android/android_handler.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/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 base::UnloadNativeLibrary(app_library); | 73 base::UnloadNativeLibrary(app_library); |
74 } | 74 } |
75 | 75 |
76 // Returns true if |url| denotes a cached app. If true |app_dir| is set to the | 76 // Returns true if |url| denotes a cached app. If true |app_dir| is set to the |
77 // path of the directory for the app and |path_to_mojo| the path of the app's | 77 // path of the directory for the app and |path_to_mojo| the path of the app's |
78 // .mojo file. | 78 // .mojo file. |
79 bool IsCachedApp(JNIEnv* env, | 79 bool IsCachedApp(JNIEnv* env, |
80 const GURL& url, | 80 const GURL& url, |
81 base::FilePath* app_dir, | 81 base::FilePath* app_dir, |
82 base::FilePath* path_to_mojo) { | 82 base::FilePath* path_to_mojo) { |
83 ScopedJavaLocalRef<jstring> j_local_apps_dir = | 83 ScopedJavaLocalRef<jstring> j_cached_apps_dir = |
84 Java_AndroidHandler_getLocalAppsDir(env, GetApplicationContext()); | 84 Java_AndroidHandler_getCachedAppsDir(env, GetApplicationContext()); |
85 const base::FilePath local_apps_fp( | 85 const base::FilePath cached_apps_fp( |
86 ConvertJavaStringToUTF8(env, j_local_apps_dir.obj())); | 86 ConvertJavaStringToUTF8(env, j_cached_apps_dir.obj())); |
87 const std::string local_apps(util::FilePathToFileURL(local_apps_fp).spec()); | 87 const std::string cached_apps(util::FilePathToFileURL(cached_apps_fp).spec()); |
88 const std::string response_url(GURL(url).spec()); | 88 const std::string response_url(GURL(url).spec()); |
89 if (response_url.size() <= local_apps.size() || | 89 if (response_url.size() <= cached_apps.size() || |
90 local_apps.compare(0u, local_apps.size(), response_url, 0u, | 90 cached_apps.compare(0u, cached_apps.size(), response_url, 0u, |
91 local_apps.size()) != 0) { | 91 cached_apps.size()) != 0) { |
92 return false; | 92 return false; |
93 } | 93 } |
94 | 94 |
95 const std::string mojo_suffix(".mojo"); | 95 const std::string mojo_suffix(".mojo"); |
96 // app_rel_path is either something like html_viewer/html_viewer.mojo, or | 96 // app_rel_path is either something like html_viewer/html_viewer.mojo, or |
97 // html_viewer.mojo, depending upon whether the app has a package. | 97 // html_viewer.mojo, depending upon whether the app has a package. |
98 const std::string app_rel_path(response_url.substr(local_apps.size() + 1)); | 98 const std::string app_rel_path(response_url.substr(cached_apps.size() + 1)); |
99 const size_t slash_index = app_rel_path.find('/'); | 99 const size_t slash_index = app_rel_path.find('/'); |
100 if (slash_index != std::string::npos) { | 100 if (slash_index != std::string::npos) { |
101 const std::string tail = | 101 const std::string tail = |
102 app_rel_path.substr(slash_index + 1, std::string::npos); | 102 app_rel_path.substr(slash_index + 1, std::string::npos); |
103 const std::string head = app_rel_path.substr(0, slash_index); | 103 const std::string head = app_rel_path.substr(0, slash_index); |
104 if (head.find('/') != std::string::npos || | 104 if (head.find('/') != std::string::npos || |
105 tail.size() <= mojo_suffix.size() || | 105 tail.size() <= mojo_suffix.size() || |
106 tail.compare(tail.size() - mojo_suffix.size(), tail.size(), | 106 tail.compare(tail.size() - mojo_suffix.size(), tail.size(), |
107 mojo_suffix) != 0) { | 107 mojo_suffix) != 0) { |
108 return false; | 108 return false; |
109 } | 109 } |
110 *app_dir = local_apps_fp.Append(head); | 110 *app_dir = cached_apps_fp.Append(head); |
111 *path_to_mojo = app_dir->Append(tail); | 111 *path_to_mojo = app_dir->Append(tail); |
112 return true; | 112 return true; |
113 } | 113 } |
114 if (app_rel_path.find('/') != std::string::npos || | 114 if (app_rel_path.find('/') != std::string::npos || |
115 app_rel_path.size() <= mojo_suffix.size() || | 115 app_rel_path.size() <= mojo_suffix.size() || |
116 app_rel_path.compare(app_rel_path.size() - mojo_suffix.size(), | 116 app_rel_path.compare(app_rel_path.size() - mojo_suffix.size(), |
117 mojo_suffix.size(), mojo_suffix) != 0) { | 117 mojo_suffix.size(), mojo_suffix) != 0) { |
118 return false; | 118 return false; |
119 } | 119 } |
120 | 120 |
121 *app_dir = local_apps_fp.Append( | 121 *app_dir = cached_apps_fp.Append( |
122 app_rel_path.substr(0, app_rel_path.size() - mojo_suffix.size())); | 122 app_rel_path.substr(0, app_rel_path.size() - mojo_suffix.size())); |
123 *path_to_mojo = local_apps_fp.Append(app_rel_path); | 123 *path_to_mojo = cached_apps_fp.Append(app_rel_path); |
124 return true; | 124 return true; |
125 } | 125 } |
126 | 126 |
127 } // namespace | 127 } // namespace |
128 | 128 |
129 AndroidHandler::AndroidHandler() : content_handler_factory_(this) { | 129 AndroidHandler::AndroidHandler() : content_handler_factory_(this) { |
130 } | 130 } |
131 | 131 |
132 AndroidHandler::~AndroidHandler() { | 132 AndroidHandler::~AndroidHandler() { |
133 } | 133 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 connection->AddService(&content_handler_factory_); | 174 connection->AddService(&content_handler_factory_); |
175 return true; | 175 return true; |
176 } | 176 } |
177 | 177 |
178 bool RegisterAndroidHandlerJni(JNIEnv* env) { | 178 bool RegisterAndroidHandlerJni(JNIEnv* env) { |
179 return RegisterNativesImpl(env); | 179 return RegisterNativesImpl(env); |
180 } | 180 } |
181 | 181 |
182 } // namespace runner | 182 } // namespace runner |
183 } // namespace mojo | 183 } // namespace mojo |
OLD | NEW |