// Copyright 2015 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.

#ifndef IOS_WEB_TEST_WEB_INT_TEST_H_
#define IOS_WEB_TEST_WEB_INT_TEST_H_

#import <WebKit/WebKit.h>

#include "base/compiler_specific.h"
#import "base/ios/block_types.h"
#include "base/macros.h"
#import "ios/web/public/navigation_manager.h"
#import "ios/web/public/test/fakes/test_web_state_delegate.h"
#include "ios/web/public/test/web_test.h"
#import "ios/web/public/web_state/web_state.h"

class GURL;

namespace web {

// A test fixture for integration tests that need to bring up the HttpServer.
class WebIntTest : public WebTest {
 protected:
  WebIntTest();
  ~WebIntTest() override;

  // WebTest methods.
  void SetUp() override;
  void TearDown() override;

  // The WebState and NavigationManager used by this test fixture.
  WebState* web_state() { return web_state_.get(); }
  NavigationManager* navigation_manager() {
    return web_state()->GetNavigationManager();
  }

  // Returns the last committed NavigationItem in |navigation_manager|.
  NavigationItem* GetLastCommittedItem() {
    return navigation_manager()->GetLastCommittedItem();
  }

  // Synchronously executes |script| on |web_state|'s JS injection receiver and
  // returns the result.
  id ExecuteJavaScript(NSString* script);

  // Executes |block| and waits until |url| is successfully loaded in
  // |web_state_|.
  bool ExecuteBlockAndWaitForLoad(const GURL& url,
                                  ProceduralBlock block) WARN_UNUSED_RESULT;

  // Navigates |web_state_| to |url| and waits for the page to be loaded.
  bool LoadUrl(const GURL& url) WARN_UNUSED_RESULT;

  // Navigates |web_state_| using |params| and waits for the page to be loaded.
  bool LoadWithParams(const NavigationManager::WebLoadParams& params)
      WARN_UNUSED_RESULT;

  // Synchronously removes data from |data_store|.
  // |websiteDataTypes| is from the constants defined in
  // "WebKit/WKWebsiteDataRecord".
  void RemoveWKWebViewCreatedData(WKWebsiteDataStore* data_store,
                                  NSSet* websiteDataTypes);

  // Returns the index of |item| in the |navigation_manager|'s session history,
  // or NSNotFound if it is not present.
  NSInteger GetIndexOfNavigationItem(const web::NavigationItem* item);

  web::TestWebStateDelegate web_state_delegate_;

 private:
  // WebState used to load pages.
  std::unique_ptr<WebState> web_state_;

  DISALLOW_COPY_AND_ASSIGN(WebIntTest);
};

}  // namespace web

#endif  // IOS_WEB_TEST_WEB_INT_TEST_H_
