Index: mojo/runner/url_resolver.cc |
diff --git a/mojo/runner/url_resolver.cc b/mojo/runner/url_resolver.cc |
index 3ae8bc01a097c769a8c4155471bde762a943243b..0dcf2f772b0cf569af257025e71f8cb9c39dba7d 100644 |
--- a/mojo/runner/url_resolver.cc |
+++ b/mojo/runner/url_resolver.cc |
@@ -5,6 +5,8 @@ |
#include "mojo/runner/url_resolver.h" |
#include "base/base_paths.h" |
+#include "base/files/file_path.h" |
+#include "base/files/file_util.h" |
#include "base/logging.h" |
#include "base/strings/utf_string_conversions.h" |
#include "mojo/runner/switches.h" |
@@ -109,8 +111,20 @@ |
// It's still a mojo: URL, use the default mapping scheme. |
std::string query; |
GURL base_url = shell::GetBaseURLAndQuery(mojo_url, &query); |
- const std::string host = base_url.host(); |
- return mojo_base_url_.Resolve(host + "/" + host + ".mojo" + query); |
+ if (mojo_base_url_.SchemeIsFile()) { |
+ const GURL url_with_directory( |
+ mojo_base_url_.Resolve(base_url.host() + "/")); |
+ const base::FilePath dir(util::UrlToFilePath(url_with_directory)); |
+ if (base::DirectoryExists(dir)) { |
+ const std::string mojo_file_name(base_url.host() + ".mojo"); |
+ const base::FilePath mojo_path = |
+ dir.Append(base::FilePath::FromUTF8Unsafe(mojo_file_name)); |
+ // Only use the directory if the .mojo exists in the directory. |
+ if (base::PathExists(mojo_path)) |
+ return url_with_directory.Resolve(base_url.host() + ".mojo" + query); |
+ } |
+ } |
+ return mojo_base_url_.Resolve(base_url.host() + ".mojo" + query); |
} |
} // namespace runner |