Allow api::WebContents to fully wrap an existing content::WebContents.
- Add an overload to `WebContents::CreateFrom` that accepts a type parameter. If type is `REMOTE`, initialization is the same as before(a thin wrapper). If not, the `api::WebContents` will be fully initialized, as if it was created by `api::WebContents::Create`. - Move common initialization code to `InitWithSessionAndOptions`.
This commit is contained in:
parent
1b1541fe1a
commit
0b3b29938f
2 changed files with 39 additions and 7 deletions
|
@ -258,17 +258,25 @@ void OnCapturePageDone(base::Callback<void(const gfx::Image&)> callback,
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
WebContents::WebContents(v8::Isolate* isolate,
|
WebContents::WebContents(v8::Isolate* isolate,
|
||||||
content::WebContents* web_contents)
|
content::WebContents* web_contents,
|
||||||
|
Type type)
|
||||||
: content::WebContentsObserver(web_contents),
|
: content::WebContentsObserver(web_contents),
|
||||||
embedder_(nullptr),
|
embedder_(nullptr),
|
||||||
type_(REMOTE),
|
type_(type),
|
||||||
request_id_(0),
|
request_id_(0),
|
||||||
background_throttling_(true),
|
background_throttling_(true),
|
||||||
enable_devtools_(true) {
|
enable_devtools_(true) {
|
||||||
web_contents->SetUserAgentOverride(GetBrowserContext()->GetUserAgent());
|
|
||||||
|
|
||||||
|
if (type == REMOTE) {
|
||||||
|
web_contents->SetUserAgentOverride(GetBrowserContext()->GetUserAgent());
|
||||||
Init(isolate);
|
Init(isolate);
|
||||||
AttachAsUserData(web_contents);
|
AttachAsUserData(web_contents);
|
||||||
|
} else {
|
||||||
|
const mate::Dictionary options = mate::Dictionary::CreateEmpty(isolate);
|
||||||
|
auto session = Session::CreateFrom(isolate, GetBrowserContext());
|
||||||
|
session_.Reset(isolate, session.ToV8());
|
||||||
|
InitWithSessionAndOptions(isolate, web_contents, session, options);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WebContents::WebContents(v8::Isolate* isolate,
|
WebContents::WebContents(v8::Isolate* isolate,
|
||||||
|
@ -336,6 +344,13 @@ WebContents::WebContents(v8::Isolate* isolate,
|
||||||
web_contents = content::WebContents::Create(params);
|
web_contents = content::WebContents::Create(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InitWithSessionAndOptions(isolate, web_contents, session, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebContents::InitWithSessionAndOptions(v8::Isolate* isolate,
|
||||||
|
content::WebContents *web_contents,
|
||||||
|
mate::Handle<api::Session> session,
|
||||||
|
const mate::Dictionary& options) {
|
||||||
Observe(web_contents);
|
Observe(web_contents);
|
||||||
InitWithWebContents(web_contents, session->browser_context());
|
InitWithWebContents(web_contents, session->browser_context());
|
||||||
|
|
||||||
|
@ -1605,7 +1620,15 @@ mate::Handle<WebContents> WebContents::CreateFrom(
|
||||||
return mate::CreateHandle(isolate, static_cast<WebContents*>(existing));
|
return mate::CreateHandle(isolate, static_cast<WebContents*>(existing));
|
||||||
|
|
||||||
// Otherwise create a new WebContents wrapper object.
|
// Otherwise create a new WebContents wrapper object.
|
||||||
return mate::CreateHandle(isolate, new WebContents(isolate, web_contents));
|
return mate::CreateHandle(isolate, new WebContents(isolate, web_contents,
|
||||||
|
REMOTE));
|
||||||
|
}
|
||||||
|
|
||||||
|
mate::Handle<WebContents> WebContents::CreateFrom(
|
||||||
|
v8::Isolate* isolate, content::WebContents* web_contents, Type type) {
|
||||||
|
// Otherwise create a new WebContents wrapper object.
|
||||||
|
return mate::CreateHandle(isolate, new WebContents(isolate, web_contents,
|
||||||
|
type));
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
|
@ -58,6 +58,8 @@ class WebContents : public mate::TrackableObject<WebContents>,
|
||||||
// Create from an existing WebContents.
|
// Create from an existing WebContents.
|
||||||
static mate::Handle<WebContents> CreateFrom(
|
static mate::Handle<WebContents> CreateFrom(
|
||||||
v8::Isolate* isolate, content::WebContents* web_contents);
|
v8::Isolate* isolate, content::WebContents* web_contents);
|
||||||
|
static mate::Handle<WebContents> CreateFrom(
|
||||||
|
v8::Isolate* isolate, content::WebContents* web_contents, Type type);
|
||||||
|
|
||||||
// Create a new WebContents.
|
// Create a new WebContents.
|
||||||
static mate::Handle<WebContents> Create(
|
static mate::Handle<WebContents> Create(
|
||||||
|
@ -191,10 +193,17 @@ class WebContents : public mate::TrackableObject<WebContents>,
|
||||||
v8::Local<v8::Value> Debugger(v8::Isolate* isolate);
|
v8::Local<v8::Value> Debugger(v8::Isolate* isolate);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
WebContents(v8::Isolate* isolate, content::WebContents* web_contents);
|
WebContents(v8::Isolate* isolate,
|
||||||
|
content::WebContents* web_contents,
|
||||||
|
Type type);
|
||||||
WebContents(v8::Isolate* isolate, const mate::Dictionary& options);
|
WebContents(v8::Isolate* isolate, const mate::Dictionary& options);
|
||||||
~WebContents();
|
~WebContents();
|
||||||
|
|
||||||
|
void InitWithSessionAndOptions(v8::Isolate* isolate,
|
||||||
|
content::WebContents *web_contents,
|
||||||
|
mate::Handle<class Session> session,
|
||||||
|
const mate::Dictionary& options);
|
||||||
|
|
||||||
// content::WebContentsDelegate:
|
// content::WebContentsDelegate:
|
||||||
bool AddMessageToConsole(content::WebContents* source,
|
bool AddMessageToConsole(content::WebContents* source,
|
||||||
int32_t level,
|
int32_t level,
|
||||||
|
|
Loading…
Reference in a new issue