chromium/ios/web/public/test/web_state_test_util.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_WEB_PUBLIC_TEST_WEB_STATE_TEST_UTIL_H_
#define IOS_WEB_PUBLIC_TEST_WEB_STATE_TEST_UTIL_H_

#include <string>
#include <vector>

#import "ios/web/public/web_state.h"
#include "url/gurl.h"

@class CRWWebController;

namespace web {
namespace test {

// Structure representing a page.
struct PageInfo {
  GURL url;
  std::string title;
};

// Synchronously executes JavaScript and returns result as id.
id ExecuteJavaScript(NSString* script, web::WebState* web_state);

// Returns CRWWebController for the given `web_state`.
CRWWebController* GetWebController(web::WebState* web_state);

// Loads the specified HTML content with URL into the WebState.
void LoadHtml(NSString* html, const GURL& url, web::WebState* web_state);

// Loads the specified HTML content into the WebState, using test url name.
void LoadHtml(NSString* html, web::WebState* web_state);

// Loads the specified HTML content with URL into the WebState. None of the
// subresources will be fetched.
bool LoadHtmlWithoutSubresources(NSString* html, web::WebState* web_state);

// Creates an unrealized WebState with a navigation session containing the
// items described by `items`.
std::unique_ptr<WebState> CreateUnrealizedWebStateWithItems(
    BrowserState* browser_state,
    size_t last_committed_item_index,
    const std::vector<PageInfo>& items);

}  // namespace test
}  // namespace web

#endif  // IOS_WEB_PUBLIC_TEST_WEB_STATE_TEST_UTIL_H_