Be a little more careful whether something is an URL or a file path.

BUG=72492
Review URL: http://codereview.chromium.org/7572046

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95731 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/net/url_fixer_upper.cc b/chrome/browser/net/url_fixer_upper.cc
index 37125d0..4d85b42 100644
--- a/chrome/browser/net/url_fixer_upper.cc
+++ b/chrome/browser/net/url_fixer_upper.cc
@@ -538,8 +538,12 @@
   PrepareStringForFileOps(text, &trimmed);
 
   bool is_file = true;
+  // Avoid recognizing definite non-file URLs as file paths.
+  GURL gurl(trimmed);
+  if (gurl.is_valid() && gurl.IsStandard())
+    is_file = false;
   FilePath full_path;
-  if (!ValidPathForFile(trimmed, &full_path)) {
+  if (is_file && !ValidPathForFile(trimmed, &full_path)) {
     // Not a path as entered, try unescaping it in case the user has
     // escaped things. We need to go through 8-bit since the escaped values
     // only represent 8-bit values.
diff --git a/chrome/browser/net/url_fixer_upper_unittest.cc b/chrome/browser/net/url_fixer_upper_unittest.cc
index f49ea8f..abe248f 100644
--- a/chrome/browser/net/url_fixer_upper_unittest.cc
+++ b/chrome/browser/net/url_fixer_upper_unittest.cc
@@ -516,4 +516,11 @@
   // done with the subdir
   EXPECT_TRUE(file_util::Delete(full_path, false));
   EXPECT_TRUE(file_util::Delete(new_dir, true));
+
+  // Test that an obvious HTTP URL isn't accidentally treated as an absolute
+  // file path (on account of system-specific craziness).
+  FilePath empty_path;
+  FilePath http_url_path(FILE_PATH_LITERAL("http://../"));
+  EXPECT_TRUE(URLFixerUpper::FixupRelativeFile(
+      empty_path, http_url_path).SchemeIs("http"));
 }