chromium/ios/web_view/internal/web_view_browser_state.h

// Copyright 2014 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_VIEW_INTERNAL_WEB_VIEW_BROWSER_STATE_H_
#define IOS_WEB_VIEW_INTERNAL_WEB_VIEW_BROWSER_STATE_H_

#include <memory>

#include "base/files/file_path.h"
#include "base/memory/ref_counted.h"
#include "components/prefs/pref_service.h"
#include "ios/web/public/browser_state.h"

namespace web {
class WebUIIOS;
}  // namespace web

namespace ios_web_view {

class WebViewURLRequestContextGetter;
class WebViewDownloadManager;

// WebView implementation of BrowserState. Can only be used only on the UI
// thread.
class WebViewBrowserState final : public web::BrowserState {
 public:
  explicit WebViewBrowserState(
      bool off_the_record,
      WebViewBrowserState* recording_browser_state = nullptr);

  WebViewBrowserState(const WebViewBrowserState&) = delete;
  WebViewBrowserState& operator=(const WebViewBrowserState&) = delete;

  ~WebViewBrowserState() override;

  // web::BrowserState implementation.
  bool IsOffTheRecord() const override;
  base::FilePath GetStatePath() const override;
  net::URLRequestContextGetter* GetRequestContext() override;

  // Returns the associated PrefService.
  PrefService* GetPrefs();

  // Returns the recording browser state associated with this browser state.
  // Returns |this| if called on a recording browser state.
  WebViewBrowserState* GetRecordingBrowserState();

  // Converts from web::BrowserState to WebViewBrowserState.
  static WebViewBrowserState* FromBrowserState(
      web::BrowserState* browser_state);

  static WebViewBrowserState* FromWebUIIOS(web::WebUIIOS* web_ui);

 private:
  // The path associated with this BrowserState object.
  base::FilePath path_;

  // Whether this BrowserState is incognito.
  bool off_the_record_;

  // The request context getter for this BrowserState object.
  scoped_refptr<WebViewURLRequestContextGetter> request_context_getter_;

  // The PrefService associated with this BrowserState.
  std::unique_ptr<PrefService> prefs_;

  // The recording browser state associated with this browser state.
  WebViewBrowserState* recording_browser_state_;

  // Handles browser downloads.
  std::unique_ptr<WebViewDownloadManager> download_manager_;
};

}  // namespace ios_web_view

#endif  // IOS_WEB_VIEW_INTERNAL_WEB_VIEW_BROWSER_STATE_H_