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());
}
Example #3
0
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());
  }
}
Example #4
0
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());
  }
}
Example #5
0
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());
 }