// Copyright 2016 The Chromium 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 "base/path_service.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
#include "content/test/content_browser_test_utils_internal.h"

namespace content {

// This browser test is aimed towards exercising the FileAPI bindings and
// the actual implementation that lives in the browser side.
class FileAPIBrowserTest : public ContentBrowserTest {
 public:
  FileAPIBrowserTest() {}
};

IN_PROC_BROWSER_TEST_F(FileAPIBrowserTest, FileInputChooserParams) {
  base::FilePath file;
  EXPECT_TRUE(base::PathService::Get(base::DIR_TEMP, &file));
  file = file.AppendASCII("bar");

  NavigateToURL(shell(), GetTestUrl(".", "file_input.html"));

  // Click on the <input type=file> element to launch the file upload picker.
  {
    base::RunLoop run_loop;
    std::unique_ptr<FileChooserDelegate> delegate(
        new FileChooserDelegate(file, run_loop.QuitClosure()));
    shell()->web_contents()->SetDelegate(delegate.get());
    EXPECT_TRUE(ExecuteScript(shell(),
                              "document.getElementById('fileinput').click();"));
    run_loop.Run();
    EXPECT_TRUE(delegate->params().default_file_name.empty());
  }

  // Click again, to verify what state was maintained and what was not.
  // The renderer is expected not to specify a default file name; it's up to
  // the browser to remember the last selected directory in the profile.
  {
    base::RunLoop run_loop;
    std::unique_ptr<FileChooserDelegate> delegate(
        new FileChooserDelegate(file, run_loop.QuitClosure()));
    shell()->web_contents()->SetDelegate(delegate.get());
    EXPECT_TRUE(ExecuteScript(shell(),
                              "document.getElementById('fileinput').click();"));
    run_loop.Run();
    EXPECT_TRUE(delegate->params().default_file_name.empty());
  }
}

}  // namespace content
