123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- // Copyright (c) 2015 GitHub, Inc.
- // Use of this source code is governed by the MIT license that can be
- // found in the LICENSE file.
- #ifndef ELECTRON_SHELL_BROWSER_API_ELECTRON_API_SESSION_H_
- #define ELECTRON_SHELL_BROWSER_API_ELECTRON_API_SESSION_H_
- #include <optional>
- #include <string>
- #include <vector>
- #include "base/memory/raw_ptr.h"
- #include "base/memory/raw_ref.h"
- #include "base/memory/weak_ptr.h"
- #include "base/values.h"
- #include "content/public/browser/download_manager.h"
- #include "electron/buildflags/buildflags.h"
- #include "gin/wrappable.h"
- #include "services/network/public/mojom/host_resolver.mojom-forward.h"
- #include "services/network/public/mojom/ssl_config.mojom-forward.h"
- #include "shell/browser/api/ipc_dispatcher.h"
- #include "shell/browser/event_emitter_mixin.h"
- #include "shell/browser/net/resolve_proxy_helper.h"
- #include "shell/common/gin_helper/cleaned_up_at_exit.h"
- #include "shell/common/gin_helper/constructible.h"
- #include "shell/common/gin_helper/pinnable.h"
- #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
- #include "chrome/browser/spellchecker/spellcheck_hunspell_dictionary.h" // nogncheck
- #endif
- #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
- #include "extensions/browser/extension_registry.h"
- #include "extensions/browser/extension_registry_observer.h"
- #endif
- class GURL;
- namespace base {
- class FilePath;
- }
- namespace gin {
- class Arguments;
- template <typename T>
- class Handle;
- } // namespace gin
- namespace gin_helper {
- class Dictionary;
- class ErrorThrower;
- } // namespace gin_helper
- namespace net {
- class ProxyConfig;
- }
- namespace electron {
- class ElectronBrowserContext;
- struct PreloadScript;
- namespace api {
- class Session final : public gin::Wrappable<Session>,
- public gin_helper::Pinnable<Session>,
- public gin_helper::Constructible<Session>,
- public gin_helper::EventEmitterMixin<Session>,
- public gin_helper::CleanedUpAtExit,
- public IpcDispatcher<Session>,
- #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
- private SpellcheckHunspellDictionary::Observer,
- #endif
- #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
- private extensions::ExtensionRegistryObserver,
- #endif
- private content::DownloadManager::Observer {
- public:
- // Gets or creates Session from the |browser_context|.
- static gin::Handle<Session> CreateFrom(
- v8::Isolate* isolate,
- ElectronBrowserContext* browser_context);
- static gin::Handle<Session> New(); // Dummy, do not use!
- static Session* FromBrowserContext(content::BrowserContext* context);
- // Gets the Session of |partition|.
- static gin::Handle<Session> FromPartition(v8::Isolate* isolate,
- const std::string& partition,
- base::Value::Dict options = {});
- // Gets the Session based on |path|.
- static std::optional<gin::Handle<Session>> FromPath(
- v8::Isolate* isolate,
- const base::FilePath& path,
- base::Value::Dict options = {});
- ElectronBrowserContext* browser_context() const {
- return &browser_context_.get();
- }
- // gin::Wrappable
- static gin::WrapperInfo kWrapperInfo;
- static void FillObjectTemplate(v8::Isolate*, v8::Local<v8::ObjectTemplate>);
- static const char* GetClassName() { return "Session"; }
- const char* GetTypeName() override;
- // gin_helper::CleanedUpAtExit
- void WillBeDestroyed() override;
- // Methods.
- v8::Local<v8::Promise> ResolveHost(
- std::string host,
- std::optional<network::mojom::ResolveHostParametersPtr> params);
- v8::Local<v8::Promise> ResolveProxy(gin::Arguments* args);
- v8::Local<v8::Promise> GetCacheSize();
- v8::Local<v8::Promise> ClearCache();
- v8::Local<v8::Promise> ClearStorageData(gin::Arguments* args);
- void FlushStorageData();
- v8::Local<v8::Promise> SetProxy(gin::Arguments* args);
- v8::Local<v8::Promise> ForceReloadProxyConfig();
- void SetDownloadPath(const base::FilePath& path);
- void EnableNetworkEmulation(const gin_helper::Dictionary& options);
- void DisableNetworkEmulation();
- void SetCertVerifyProc(v8::Local<v8::Value> proc, gin::Arguments* args);
- void SetPermissionRequestHandler(v8::Local<v8::Value> val,
- gin::Arguments* args);
- void SetPermissionCheckHandler(v8::Local<v8::Value> val,
- gin::Arguments* args);
- void SetDevicePermissionHandler(v8::Local<v8::Value> val,
- gin::Arguments* args);
- void SetUSBProtectedClassesHandler(v8::Local<v8::Value> val,
- gin::Arguments* args);
- void SetBluetoothPairingHandler(v8::Local<v8::Value> val,
- gin::Arguments* args);
- v8::Local<v8::Promise> ClearHostResolverCache(gin::Arguments* args);
- v8::Local<v8::Promise> ClearAuthCache();
- void AllowNTLMCredentialsForDomains(const std::string& domains);
- void SetUserAgent(const std::string& user_agent, gin::Arguments* args);
- std::string GetUserAgent();
- void SetSSLConfig(network::mojom::SSLConfigPtr config);
- bool IsPersistent();
- v8::Local<v8::Promise> GetBlobData(v8::Isolate* isolate,
- const std::string& uuid);
- void DownloadURL(const GURL& url, gin::Arguments* args);
- void CreateInterruptedDownload(const gin_helper::Dictionary& options);
- std::string RegisterPreloadScript(gin_helper::ErrorThrower thrower,
- const PreloadScript& new_preload_script);
- void UnregisterPreloadScript(gin_helper::ErrorThrower thrower,
- const std::string& script_id);
- std::vector<PreloadScript> GetPreloadScripts() const;
- v8::Local<v8::Promise> GetSharedDictionaryInfo(
- const gin_helper::Dictionary& options);
- v8::Local<v8::Promise> GetSharedDictionaryUsageInfo();
- v8::Local<v8::Promise> ClearSharedDictionaryCache();
- v8::Local<v8::Promise> ClearSharedDictionaryCacheForIsolationKey(
- const gin_helper::Dictionary& options);
- v8::Local<v8::Value> Cookies(v8::Isolate* isolate);
- v8::Local<v8::Value> Protocol(v8::Isolate* isolate);
- v8::Local<v8::Value> ServiceWorkerContext(v8::Isolate* isolate);
- v8::Local<v8::Value> WebRequest(v8::Isolate* isolate);
- v8::Local<v8::Value> NetLog(v8::Isolate* isolate);
- void Preconnect(const gin_helper::Dictionary& options, gin::Arguments* args);
- v8::Local<v8::Promise> CloseAllConnections();
- v8::Local<v8::Value> GetPath(v8::Isolate* isolate);
- void SetCodeCachePath(gin::Arguments* args);
- v8::Local<v8::Promise> ClearCodeCaches(const gin_helper::Dictionary& options);
- v8::Local<v8::Value> ClearData(gin_helper::ErrorThrower thrower,
- gin::Arguments* args);
- #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
- base::Value GetSpellCheckerLanguages();
- void SetSpellCheckerLanguages(gin_helper::ErrorThrower thrower,
- const std::vector<std::string>& languages);
- v8::Local<v8::Promise> ListWordsInSpellCheckerDictionary();
- bool AddWordToSpellCheckerDictionary(const std::string& word);
- bool RemoveWordFromSpellCheckerDictionary(const std::string& word);
- void SetSpellCheckerEnabled(bool b);
- bool IsSpellCheckerEnabled() const;
- #endif
- #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
- v8::Local<v8::Promise> LoadExtension(const base::FilePath& extension_path,
- gin::Arguments* args);
- void RemoveExtension(const std::string& extension_id);
- v8::Local<v8::Value> GetExtension(const std::string& extension_id);
- v8::Local<v8::Value> GetAllExtensions();
- // extensions::ExtensionRegistryObserver:
- void OnExtensionLoaded(content::BrowserContext* browser_context,
- const extensions::Extension* extension) override;
- void OnExtensionReady(content::BrowserContext* browser_context,
- const extensions::Extension* extension) override;
- void OnExtensionUnloaded(content::BrowserContext* browser_context,
- const extensions::Extension* extension,
- extensions::UnloadedExtensionReason reason) override;
- #endif
- // disable copy
- Session(const Session&) = delete;
- Session& operator=(const Session&) = delete;
- protected:
- Session(v8::Isolate* isolate, ElectronBrowserContext* browser_context);
- ~Session() override;
- // content::DownloadManager::Observer:
- void OnDownloadCreated(content::DownloadManager* manager,
- download::DownloadItem* item) override;
- #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
- // SpellcheckHunspellDictionary::Observer
- void OnHunspellDictionaryInitialized(const std::string& language) override;
- void OnHunspellDictionaryDownloadBegin(const std::string& language) override;
- void OnHunspellDictionaryDownloadSuccess(
- const std::string& language) override;
- void OnHunspellDictionaryDownloadFailure(
- const std::string& language) override;
- #endif
- private:
- void SetDisplayMediaRequestHandler(v8::Isolate* isolate,
- v8::Local<v8::Value> val);
- // Cached gin_helper::Wrappable objects.
- v8::Global<v8::Value> cookies_;
- v8::Global<v8::Value> protocol_;
- v8::Global<v8::Value> net_log_;
- v8::Global<v8::Value> service_worker_context_;
- v8::Global<v8::Value> web_request_;
- raw_ptr<v8::Isolate> isolate_;
- // The client id to enable the network throttler.
- base::UnguessableToken network_emulation_token_;
- const raw_ref<ElectronBrowserContext> browser_context_;
- base::WeakPtrFactory<Session> weak_factory_{this};
- };
- } // namespace api
- } // namespace electron
- #endif // ELECTRON_SHELL_BROWSER_API_ELECTRON_API_SESSION_H_
|