// In general, extracting the inner URL varies by scheme. It just so happens // that all the URL schemes we currently support that use inner URLs for their // security origin can be parsed using this algorithm. static KURL extractInnerURL(const KURL& url) { if (url.innerURL()) return *url.innerURL(); // FIXME: Update this callsite to use the innerURL member function when // we finish implementing it. return KURL(ParsedURLString, decodeURLEscapeSequences(url.path())); }
bool DOMFileSystemBase::crackFileSystemURL(const KURL& url, FileSystemType& type, String& filePath) { if (!url.protocolIs("filesystem")) return false; if (!url.innerURL()) return false; String typeString = url.innerURL()->path().substring(1); if (!pathPrefixToFileSystemType(typeString, type)) return false; filePath = decodeURLEscapeSequences(url.path()); return true; }
TEST(KURLTest, DeepCopyInnerURL) { const char url[] = "filesystem:http://www.google.com/temporary/test.txt"; const char innerURL[] = "http://www.google.com/temporary"; KURL src(ParsedURLString, url); EXPECT_TRUE(src.string() == url); EXPECT_TRUE(src.innerURL()->string() == innerURL); KURL dest = src.copy(); EXPECT_TRUE(dest.string() == url); EXPECT_TRUE(dest.innerURL()->string() == innerURL); }
bool DOMFileSystemBase::crackFileSystemURL(const KURL& url, FileSystemType& type, String& filePath) { if (!url.protocolIs("filesystem")) return false; if (!url.innerURL()) return false; String typeString = url.innerURL()->path().substring(1); if (typeString == temporaryPathPrefix) type = FileSystemTypeTemporary; else if (typeString == persistentPathPrefix) type = FileSystemTypePersistent; else if (typeString == externalPathPrefix) type = FileSystemTypeExternal; else return false; filePath = decodeURLEscapeSequences(url.path()); return true; }