session: api to emulate network conditions
This commit is contained in:
parent
690f859a78
commit
fc7f4ae24b
3 changed files with 59 additions and 0 deletions
|
@ -19,6 +19,8 @@
|
||||||
#include "base/prefs/pref_service.h"
|
#include "base/prefs/pref_service.h"
|
||||||
#include "base/strings/string_util.h"
|
#include "base/strings/string_util.h"
|
||||||
#include "base/thread_task_runner_handle.h"
|
#include "base/thread_task_runner_handle.h"
|
||||||
|
#include "brightray/browser/net/devtools_network_conditions.h"
|
||||||
|
#include "brightray/browser/net/devtools_network_controller.h"
|
||||||
#include "chrome/common/pref_names.h"
|
#include "chrome/common/pref_names.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
#include "content/public/browser/storage_partition.h"
|
#include "content/public/browser/storage_partition.h"
|
||||||
|
@ -294,6 +296,43 @@ void Session::SetDownloadPath(const base::FilePath& path) {
|
||||||
prefs::kDownloadDefaultDirectory, path);
|
prefs::kDownloadDefaultDirectory, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Session::EnableNetworkEmulation(const mate::Dictionary& options) {
|
||||||
|
scoped_ptr<brightray::DevToolsNetworkConditions> conditions;
|
||||||
|
bool offline = false;
|
||||||
|
double latency, download_throughput, upload_throughput;
|
||||||
|
if (options.Get("offline", &offline) && offline) {
|
||||||
|
conditions.reset(new brightray::DevToolsNetworkConditions(offline));
|
||||||
|
} else {
|
||||||
|
options.Get("latency", &latency);
|
||||||
|
options.Get("downloadThroughput", &download_throughput);
|
||||||
|
options.Get("uploadThroughput", &upload_throughput);
|
||||||
|
conditions.reset(
|
||||||
|
new brightray::DevToolsNetworkConditions(false,
|
||||||
|
latency,
|
||||||
|
download_throughput,
|
||||||
|
upload_throughput));
|
||||||
|
}
|
||||||
|
auto controller = browser_context_->GetDevToolsNetworkController();
|
||||||
|
|
||||||
|
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
||||||
|
base::Bind(&brightray::DevToolsNetworkController::SetNetworkState,
|
||||||
|
base::Unretained(controller),
|
||||||
|
std::string(),
|
||||||
|
base::Passed(&conditions)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Session::DisableNetworkEmulation() {
|
||||||
|
scoped_ptr<brightray::DevToolsNetworkConditions> conditions(
|
||||||
|
new brightray::DevToolsNetworkConditions(false));
|
||||||
|
auto controller = browser_context_->GetDevToolsNetworkController();
|
||||||
|
|
||||||
|
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
||||||
|
base::Bind(&brightray::DevToolsNetworkController::SetNetworkState,
|
||||||
|
base::Unretained(controller),
|
||||||
|
std::string(),
|
||||||
|
base::Passed(&conditions)));
|
||||||
|
}
|
||||||
|
|
||||||
v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
|
v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
|
||||||
if (cookies_.IsEmpty()) {
|
if (cookies_.IsEmpty()) {
|
||||||
auto handle = atom::api::Cookies::Create(isolate, browser_context());
|
auto handle = atom::api::Cookies::Create(isolate, browser_context());
|
||||||
|
@ -310,6 +349,8 @@ mate::ObjectTemplateBuilder Session::GetObjectTemplateBuilder(
|
||||||
.SetMethod("clearStorageData", &Session::ClearStorageData)
|
.SetMethod("clearStorageData", &Session::ClearStorageData)
|
||||||
.SetMethod("setProxy", &Session::SetProxy)
|
.SetMethod("setProxy", &Session::SetProxy)
|
||||||
.SetMethod("setDownloadPath", &Session::SetDownloadPath)
|
.SetMethod("setDownloadPath", &Session::SetDownloadPath)
|
||||||
|
.SetMethod("enableNetworkEmulation", &Session::EnableNetworkEmulation)
|
||||||
|
.SetMethod("disableNetworkEmulation", &Session::DisableNetworkEmulation)
|
||||||
.SetProperty("cookies", &Session::Cookies);
|
.SetProperty("cookies", &Session::Cookies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ class FilePath;
|
||||||
|
|
||||||
namespace mate {
|
namespace mate {
|
||||||
class Arguments;
|
class Arguments;
|
||||||
|
class Dictionary;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
@ -65,6 +66,8 @@ class Session: public mate::TrackableObject<Session>,
|
||||||
void ClearStorageData(mate::Arguments* args);
|
void ClearStorageData(mate::Arguments* args);
|
||||||
void SetProxy(const std::string& proxy, const base::Closure& callback);
|
void SetProxy(const std::string& proxy, const base::Closure& callback);
|
||||||
void SetDownloadPath(const base::FilePath& path);
|
void SetDownloadPath(const base::FilePath& path);
|
||||||
|
void EnableNetworkEmulation(const mate::Dictionary& options);
|
||||||
|
void DisableNetworkEmulation();
|
||||||
v8::Local<v8::Value> Cookies(v8::Isolate* isolate);
|
v8::Local<v8::Value> Cookies(v8::Isolate* isolate);
|
||||||
|
|
||||||
// Cached object for cookies API.
|
// Cached object for cookies API.
|
||||||
|
|
|
@ -191,3 +191,18 @@ proxy-uri = [<proxy-scheme>"://"]<proxy-host>[":"<proxy-port>]
|
||||||
|
|
||||||
Sets download saving directory. By default, the download directory will be the
|
Sets download saving directory. By default, the download directory will be the
|
||||||
`Downloads` under the respective app folder.
|
`Downloads` under the respective app folder.
|
||||||
|
|
||||||
|
### `session.enableNetworkEmulation(options)`
|
||||||
|
|
||||||
|
* `options` Object
|
||||||
|
* `offline` Boolean - Whether to emulate network outage.
|
||||||
|
* `latency` Double - RTT in ms
|
||||||
|
* `downloadThroughput` Double - Download rate in Bps
|
||||||
|
* `uploadThroughput` Double - Upload rate in Bps
|
||||||
|
|
||||||
|
Emulates network with the given configuration for the `session`.
|
||||||
|
|
||||||
|
### `session.disableNetworkEmulation`
|
||||||
|
|
||||||
|
Disables any network emulation already active for the `session`. Resets to
|
||||||
|
the original network configuration.
|
||||||
|
|
Loading…
Reference in a new issue