TEST(FileInputTypeTest, createFileList) { Vector<FileChooserFileInfo> files; // Natvie file. files.append(FileChooserFileInfo( "/native/path/native-file", "display-name")); // Non-native file. KURL url(ParsedURLStringTag(), "filesystem:http://example.com/isolated/hash/non-native-file"); FileMetadata metadata; metadata.length = 64; metadata.modificationTime = 24 * 60 * 60 /* sec */; files.append(FileChooserFileInfo(url, metadata)); FileList* list = FileInputType::createFileList(files, false); ASSERT_TRUE(list); ASSERT_EQ(2u, list->length()); EXPECT_EQ("/native/path/native-file", list->item(0)->path()); EXPECT_EQ("display-name", list->item(0)->name()); EXPECT_TRUE(list->item(0)->fileSystemURL().isEmpty()); EXPECT_TRUE(list->item(1)->path().isEmpty()); EXPECT_EQ("non-native-file", list->item(1)->name()); EXPECT_EQ(url, list->item(1)->fileSystemURL()); EXPECT_EQ(64u, list->item(1)->size()); EXPECT_EQ(24 * 60 * 60 * 1000 /* ms */, list->item(1)->lastModified()); }
TEST(FileInputTypeTest, ignoreDroppedNonNativeFiles) { Document* document = Document::create(); HTMLInputElement* input = HTMLInputElement::create(*document, nullptr, false); InputType* fileInput = FileInputType::create(*input); DataObject* nativeFileRawDragData = DataObject::create(); const DragData nativeFileDragData(nativeFileRawDragData, IntPoint(), IntPoint(), DragOperationCopy); nativeFileDragData.platformData()->add(File::create("/native/path")); nativeFileDragData.platformData()->setFilesystemId("fileSystemId"); fileInput->receiveDroppedFiles(&nativeFileDragData); EXPECT_EQ("fileSystemId", fileInput->droppedFileSystemId()); ASSERT_EQ(1u, fileInput->files()->length()); EXPECT_EQ(String("/native/path"), fileInput->files()->item(0)->path()); DataObject* nonNativeFileRawDragData = DataObject::create(); const DragData nonNativeFileDragData(nonNativeFileRawDragData, IntPoint(), IntPoint(), DragOperationCopy); FileMetadata metadata; metadata.length = 1234; const KURL url(ParsedURLStringTag(), "filesystem:http://example.com/isolated/hash/non-native-file"); nonNativeFileDragData.platformData()->add(File::createForFileSystemFile(url, metadata, File::IsUserVisible)); nonNativeFileDragData.platformData()->setFilesystemId("fileSystemId"); fileInput->receiveDroppedFiles(&nonNativeFileDragData); // Dropping non-native files should not change the existing files. EXPECT_EQ("fileSystemId", fileInput->droppedFileSystemId()); ASSERT_EQ(1u, fileInput->files()->length()); EXPECT_EQ(String("/native/path"), fileInput->files()->item(0)->path()); }
TEST(LinkLoaderTest, Preconnect) { struct { const char* href; CrossOriginAttributeValue crossOrigin; const bool shouldLoad; const bool isHTTPS; const bool isCrossOrigin; } cases[] = { {"http://example.com/", CrossOriginAttributeNotSet, true, false, false}, {"https://example.com/", CrossOriginAttributeNotSet, true, true, false}, {"http://example.com/", CrossOriginAttributeAnonymous, true, false, true}, {"//example.com/", CrossOriginAttributeNotSet, true, false, false}, {"http://example.com/", CrossOriginAttributeNotSet, false, false, false}, }; // Test the cases with a single header for (const auto& testCase : cases) { std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(500, 500)); Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::create(testCase.shouldLoad); LinkLoader* loader = LinkLoader::create(loaderClient.get()); KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.com")), testCase.href); NetworkHintsMock networkHints; loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin, String(), String(), String(), ReferrerPolicyDefault, hrefURL, dummyPageHolder->document(), networkHints); EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); } }
TEST(LinkLoaderTest, DNSPrefetch) { struct { const char* href; const bool shouldLoad; } cases[] = { {"http://example.com/", true}, {"https://example.com/", true}, {"//example.com/", true}, {"//example.com/", false}, }; // Test the cases with a single header for (const auto& testCase : cases) { std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(500, 500)); dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::create(testCase.shouldLoad); LinkLoader* loader = LinkLoader::create(loaderClient.get()); KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.com")), testCase.href); NetworkHintsMock networkHints; loader->loadLink(LinkRelAttribute("dns-prefetch"), CrossOriginAttributeNotSet, String(), String(), String(), ReferrerPolicyDefault, hrefURL, dummyPageHolder->document(), networkHints); EXPECT_FALSE(networkHints.didPreconnect()); EXPECT_EQ(testCase.shouldLoad, networkHints.didDnsPrefetch()); } }
TEST(FileListTest, pathsForUserVisibleFiles) { FileList* const fileList = FileList::create(); // Native file. fileList->append(File::create("/native/path")); // Blob file. const RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(); fileList->append(File::create("name", 0.0, blobDataHandle)); // User visible snapshot file. { FileMetadata metadata; metadata.platformPath = "/native/visible/snapshot"; fileList->append(File::createForFileSystemFile("name", metadata, File::IsUserVisible)); } // Not user visible snapshot file. { FileMetadata metadata; metadata.platformPath = "/native/not-visible/snapshot"; fileList->append(File::createForFileSystemFile("name", metadata, File::IsNotUserVisible)); } // User visible file system URL file. { KURL url(ParsedURLStringTag(), "filesystem:http://example.com/isolated/hash/visible-non-native-file"); fileList->append(File::createForFileSystemFile(url, FileMetadata(), File::IsUserVisible)); } // Not user visible file system URL file. { KURL url(ParsedURLStringTag(), "filesystem:http://example.com/isolated/hash/not-visible-non-native-file"); fileList->append(File::createForFileSystemFile(url, FileMetadata(), File::IsNotUserVisible)); } Vector<String> paths = fileList->pathsForUserVisibleFiles(); ASSERT_EQ(3u, paths.size()); EXPECT_EQ("/native/path", paths[0]); EXPECT_EQ("/native/visible/snapshot", paths[1]); EXPECT_EQ("visible-non-native-file", paths[2]) << "Files not backed by a native file should return name."; }
void test(PreconnectTestCase testCase) { // TODO(yoav): Need a mock loader here to verify things are happenning beyond preconnect. PreloaderNetworkHintsMock networkHints; OwnPtr<PreloadRequest> preloadRequest = PreloadRequest::create(String(), TextPosition(), testCase.url, KURL(ParsedURLStringTag(), testCase.baseURL), Resource::Image, ReferrerPolicy(), FetchRequest::ResourceWidth(), ClientHintsPreferences(), PreloadRequest::RequestTypePreconnect); if (testCase.isCORS) preloadRequest->setCrossOriginEnabled(DoNotAllowStoredCredentials); OwnPtrWillBeRawPtr<HTMLResourcePreloader> preloader = HTMLResourcePreloader::create(m_dummyPageHolder->document()); preloader->preload(preloadRequest.release(), networkHints); ASSERT_TRUE(networkHints.didPreconnect()); ASSERT_EQ(testCase.isCORS, networkHints.isCrossOrigin()); ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); }