]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/linux/tests/ceftests/dialog_unittest.cc
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / linux / tests / ceftests / dialog_unittest.cc
diff --git a/dependencies64/cef/linux/tests/ceftests/dialog_unittest.cc b/dependencies64/cef/linux/tests/ceftests/dialog_unittest.cc
new file mode 100644 (file)
index 0000000..64f9841
--- /dev/null
@@ -0,0 +1,349 @@
+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
+// reserved. Use of this source code is governed by a BSD-style license that
+// can be found in the LICENSE file.
+
+#include "include/base/cef_bind.h"
+#include "include/wrapper/cef_closure_task.h"
+#include "tests/ceftests/test_handler.h"
+#include "tests/ceftests/test_util.h"
+#include "tests/gtest/include/gtest/gtest.h"
+
+namespace {
+
+const char* kTestUrl = "http://tests/DialogTestHandler";
+
+class DialogTestHandler : public TestHandler {
+ public:
+  struct TestConfig {
+    explicit TestConfig(FileDialogMode dialog_mode)
+      : mode(dialog_mode),
+        title("Test Title"),
+        default_file_name("Test File Name"),
+        selected_accept_filter(1),  // Something other than 0 for testing.
+        callback_async(false),
+        callback_cancel(false) {
+      accept_types.push_back("text/*");
+      accept_types.push_back(".js");
+      accept_types.push_back(".css");
+    }
+
+    FileDialogMode mode;
+    CefString title;
+    CefString default_file_name;
+    std::vector<CefString> accept_types;
+    int selected_accept_filter;
+
+    bool callback_async;  // True if the callback should execute asynchronously.
+    bool callback_cancel;  // True if the callback should cancel.
+    std::vector<CefString> callback_paths;  // Resulting paths if not cancelled.
+  };
+
+  class Callback : public CefRunFileDialogCallback {
+   public:
+    explicit Callback(DialogTestHandler* handler)
+        : handler_(handler) {
+    }
+
+    void OnFileDialogDismissed(
+        int selected_accept_filter,
+        const std::vector<CefString>& file_paths) override {
+      handler_->got_onfiledialogdismissed_.yes();
+
+      if (handler_->config_.callback_cancel) {
+        EXPECT_EQ(0, selected_accept_filter);
+        EXPECT_TRUE(file_paths.empty());
+      } else {
+        EXPECT_EQ(handler_->config_.selected_accept_filter,
+                  selected_accept_filter);
+        TestStringVectorEqual(handler_->config_.callback_paths, file_paths);
+      }
+
+      handler_->DestroyTest();
+      handler_ = NULL;
+    }
+
+   private:
+    DialogTestHandler* handler_;
+
+    IMPLEMENT_REFCOUNTING(Callback);
+  };
+
+  explicit DialogTestHandler(const TestConfig& config)
+      : config_(config) {
+  }
+
+  void RunTest() override {
+    AddResource(kTestUrl, "<html><body>TEST</body></html>", "text/html");
+
+    // Create the browser
+    CreateBrowser(kTestUrl);
+
+    // Time out the test after a reasonable period of time.
+    SetTestTimeout();
+  }
+
+  void OnLoadEnd(CefRefPtr<CefBrowser> browser,
+                 CefRefPtr<CefFrame> frame,
+                 int httpStatusCode) override {
+    browser->GetHost()->RunFileDialog(config_.mode,
+                                      config_.title,
+                                      config_.default_file_name,
+                                      config_.accept_types,
+                                      config_.selected_accept_filter,
+                                      new Callback(this));
+  }
+
+  void ExecuteCallback(CefRefPtr<CefFileDialogCallback> callback) {
+    if (config_.callback_cancel)
+      callback->Cancel();
+    else
+      callback->Continue(config_.selected_accept_filter,
+                         config_.callback_paths);
+  }
+
+  // CefDialogHandler
+  bool OnFileDialog(
+      CefRefPtr<CefBrowser> browser,
+      FileDialogMode mode,
+      const CefString& title,
+      const CefString& default_file_name,
+      const std::vector<CefString>& accept_types,
+      int selected_accept_filter,
+      CefRefPtr<CefFileDialogCallback> callback) override {
+    got_onfiledialog_.yes();
+
+    std::string url = browser->GetMainFrame()->GetURL();
+    EXPECT_STREQ(kTestUrl, url.c_str());
+
+    EXPECT_EQ(config_.mode, mode);
+    EXPECT_STREQ(config_.title.ToString().c_str(), title.ToString().c_str());
+    EXPECT_STREQ(config_.default_file_name.ToString().c_str(),
+                 default_file_name.ToString().c_str());
+    TestStringVectorEqual(config_.accept_types, accept_types);
+
+    if (config_.callback_async) {
+      CefPostTask(TID_UI,
+          base::Bind(&DialogTestHandler::ExecuteCallback, this, callback));
+    } else {
+      ExecuteCallback(callback);
+    }
+
+    return true;
+  }
+
+  void DestroyTest() override {
+    EXPECT_TRUE(got_onfiledialog_);
+    EXPECT_TRUE(got_onfiledialogdismissed_);
+
+    TestHandler::DestroyTest();
+  }
+
+  TestConfig config_;
+
+  TrackCallback got_onfiledialog_;
+  TrackCallback got_onfiledialogdismissed_;
+
+  IMPLEMENT_REFCOUNTING(DialogTestHandler);
+};
+
+}  // namespace
+
+// Test with all parameters empty.
+TEST(DialogTest, FileEmptyParams) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN);
+  config.title.clear();
+  config.default_file_name.clear();
+  config.accept_types.clear();
+  config.callback_async = false;
+  config.callback_cancel = false;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileAdditionalFlags) {
+  DialogTestHandler::TestConfig config(
+      static_cast<cef_file_dialog_mode_t>(FILE_DIALOG_OPEN |
+                                          FILE_DIALOG_HIDEREADONLY_FLAG |
+                                          FILE_DIALOG_OVERWRITEPROMPT_FLAG));
+  config.title.clear();
+  config.default_file_name.clear();
+  config.accept_types.clear();
+  config.callback_async = false;
+  config.callback_cancel = false;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpen) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN);
+  config.callback_async = false;
+  config.callback_cancel = false;
+  config.callback_paths.push_back("/path/to/file1.txt");
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenCancel) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN);
+  config.callback_async = false;
+  config.callback_cancel = true;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenAsync) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN);
+  config.callback_async = true;
+  config.callback_cancel = false;
+  config.callback_paths.push_back("/path/to/file1.txt");
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenAsyncCancel) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN);
+  config.callback_async = false;
+  config.callback_cancel = true;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenMultiple) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN_MULTIPLE);
+  config.callback_async = false;
+  config.callback_cancel = false;
+  config.callback_paths.push_back("/path/to/file1.txt");
+  config.callback_paths.push_back("/path/to/file2.txt");
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenMultipleCancel) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN_MULTIPLE);
+  config.callback_async = false;
+  config.callback_cancel = true;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenMultipleAsync) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN_MULTIPLE);
+  config.callback_async = true;
+  config.callback_cancel = false;
+  config.callback_paths.push_back("/path/to/file1.txt");
+  config.callback_paths.push_back("/path/to/file2.txt");
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenMultipleAsyncCancel) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN_MULTIPLE);
+  config.callback_async = false;
+  config.callback_cancel = true;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenFolder) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN_FOLDER);
+  config.callback_async = false;
+  config.callback_cancel = false;
+  config.callback_paths.push_back("/path/to/folder");
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenFolderCancel) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN_FOLDER);
+  config.callback_async = false;
+  config.callback_cancel = true;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenFolderAsync) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN_FOLDER);
+  config.callback_async = true;
+  config.callback_cancel = false;
+  config.callback_paths.push_back("/path/to/folder");
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileOpenFolderAsyncCancel) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_OPEN_FOLDER);
+  config.callback_async = false;
+  config.callback_cancel = true;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileSave) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_SAVE);
+  config.callback_async = false;
+  config.callback_cancel = false;
+  config.callback_paths.push_back("/path/to/file1.txt");
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileSaveCancel) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_SAVE);
+  config.callback_async = false;
+  config.callback_cancel = true;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileSaveAsync) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_SAVE);
+  config.callback_async = true;
+  config.callback_cancel = false;
+  config.callback_paths.push_back("/path/to/file1.txt");
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}
+
+TEST(DialogTest, FileSaveAsyncCancel) {
+  DialogTestHandler::TestConfig config(FILE_DIALOG_SAVE);
+  config.callback_async = false;
+  config.callback_cancel = true;
+
+  CefRefPtr<DialogTestHandler> handler = new DialogTestHandler(config);
+  handler->ExecuteTest();
+  ReleaseAndWaitForDestructor(handler);
+}