// 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 SHELL_BROWSER_API_ATOM_API_SESSION_H_ #define SHELL_BROWSER_API_ATOM_API_SESSION_H_ #include #include #include "base/values.h" #include "content/public/browser/download_manager.h" #include "electron/buildflags/buildflags.h" #include "gin/handle.h" #include "shell/browser/net/resolve_proxy_helper.h" #include "shell/common/gin_helper/promise.h" #include "shell/common/gin_helper/trackable_object.h" class GURL; namespace base { class FilePath; } namespace gin_helper { class Dictionary; } namespace net { class ProxyConfig; } namespace electron { class AtomBrowserContext; namespace api { class Session : public gin_helper::TrackableObject, public content::DownloadManager::Observer { public: // Gets or creates Session from the |browser_context|. static gin::Handle CreateFrom(v8::Isolate* isolate, AtomBrowserContext* browser_context); // Gets the Session of |partition|. static gin::Handle FromPartition( v8::Isolate* isolate, const std::string& partition, base::DictionaryValue options = base::DictionaryValue()); AtomBrowserContext* browser_context() const { return browser_context_.get(); } // gin_helper::TrackableObject: static void BuildPrototype(v8::Isolate* isolate, v8::Local prototype); // Methods. v8::Local ResolveProxy(gin_helper::Arguments* args); v8::Local GetCacheSize(); v8::Local ClearCache(); v8::Local ClearStorageData(gin_helper::Arguments* args); void FlushStorageData(); v8::Local SetProxy(gin_helper::Arguments* args); void SetDownloadPath(const base::FilePath& path); void EnableNetworkEmulation(const gin_helper::Dictionary& options); void DisableNetworkEmulation(); void SetCertVerifyProc(v8::Local proc, gin_helper::Arguments* args); void SetPermissionRequestHandler(v8::Local val, gin_helper::Arguments* args); void SetPermissionCheckHandler(v8::Local val, gin_helper::Arguments* args); v8::Local ClearHostResolverCache(gin_helper::Arguments* args); v8::Local ClearAuthCache(); void AllowNTLMCredentialsForDomains(const std::string& domains); void SetUserAgent(const std::string& user_agent, gin_helper::Arguments* args); std::string GetUserAgent(); v8::Local GetBlobData(v8::Isolate* isolate, const std::string& uuid); void DownloadURL(const GURL& url); void CreateInterruptedDownload(const gin_helper::Dictionary& options); void SetPreloads(const std::vector& preloads); std::vector GetPreloads() const; v8::Local Cookies(v8::Isolate* isolate); v8::Local Protocol(v8::Isolate* isolate); v8::Local WebRequest(v8::Isolate* isolate); v8::Local NetLog(v8::Isolate* isolate); void Preconnect(const gin_helper::Dictionary& options, gin_helper::Arguments* args); #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER) base::Value GetSpellCheckerLanguages(); void SetSpellCheckerLanguages(gin_helper::ErrorThrower thrower, const std::vector& languages); bool AddWordToSpellCheckerDictionary(const std::string& word); #endif #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS) void LoadChromeExtension(const base::FilePath extension_path); #endif protected: Session(v8::Isolate* isolate, AtomBrowserContext* browser_context); ~Session() override; // content::DownloadManager::Observer: void OnDownloadCreated(content::DownloadManager* manager, download::DownloadItem* item) override; private: // Cached mate::Wrappable objects. v8::Global cookies_; v8::Global protocol_; v8::Global net_log_; // Cached object. v8::Global web_request_; // The client id to enable the network throttler. base::UnguessableToken network_emulation_token_; scoped_refptr browser_context_; DISALLOW_COPY_AND_ASSIGN(Session); }; } // namespace api } // namespace electron #endif // SHELL_BROWSER_API_ATOM_API_SESSION_H_