#ifndef HEADLESS_PUBLIC_HEADLESS_BROWSER_CONTEXT_H_
#define HEADLESS_PUBLIC_HEADLESS_BROWSER_CONTEXT_H_
#include <list>
#include <memory>
#include <string>
#include <vector>
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "headless/public/headless_export.h"
#include "headless/public/headless_web_contents.h"
#include "net/proxy_resolution/proxy_resolution_service.h"
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
namespace base {
class FilePath;
}
namespace headless {
class HeadlessBrowserImpl;
class HeadlessBrowserContextOptions;
using blink::web_pref::WebPreferences;
class HEADLESS_EXPORT HeadlessBrowserContext {
public:
class Builder;
HeadlessBrowserContext(const HeadlessBrowserContext&) = delete;
HeadlessBrowserContext& operator=(const HeadlessBrowserContext&) = delete;
virtual ~HeadlessBrowserContext() {}
virtual HeadlessWebContents::Builder CreateWebContentsBuilder() = 0;
virtual std::vector<HeadlessWebContents*> GetAllWebContents() = 0;
virtual void Close() = 0;
virtual const std::string& Id() = 0;
protected:
HeadlessBrowserContext() {}
};
class HEADLESS_EXPORT HeadlessBrowserContext::Builder {
public:
Builder(Builder&&);
Builder(const Builder&) = delete;
Builder& operator=(const Builder&) = delete;
~Builder();
Builder& EnableUnsafeNetworkAccessWithMojoBindings(
bool enable_http_and_https_if_mojo_used);
Builder& SetAcceptLanguage(const std::string& accept_language);
Builder& SetUserAgent(const std::string& user_agent);
Builder& SetProxyConfig(std::unique_ptr<net::ProxyConfig> proxy_config);
Builder& SetWindowSize(const gfx::Size& window_size);
Builder& SetUserDataDir(const base::FilePath& user_data_dir);
Builder& SetDiskCacheDir(const base::FilePath& disk_cache_dir);
Builder& SetIncognitoMode(bool incognito_mode);
Builder& SetBlockNewWebContents(bool block_new_web_contents);
HeadlessBrowserContext* Build();
private:
friend class HeadlessBrowserImpl;
friend class HeadlessBrowserContextImpl;
explicit Builder(HeadlessBrowserImpl* browser);
raw_ptr<HeadlessBrowserImpl> browser_;
std::unique_ptr<HeadlessBrowserContextOptions> options_;
};
}
#endif