test: move more web contents specs (#20099)
This commit is contained in:
parent
b7b0992768
commit
a9e695d05f
5 changed files with 504 additions and 572 deletions
|
@ -933,10 +933,14 @@ void WebContents::DidFinishLoad(content::RenderFrameHost* render_frame_host,
|
|||
bool is_main_frame = !render_frame_host->GetParent();
|
||||
int frame_process_id = render_frame_host->GetProcess()->GetID();
|
||||
int frame_routing_id = render_frame_host->GetRoutingID();
|
||||
auto weak_this = GetWeakPtr();
|
||||
Emit("did-frame-finish-load", is_main_frame, frame_process_id,
|
||||
frame_routing_id);
|
||||
|
||||
if (is_main_frame)
|
||||
// ⚠️WARNING!⚠️
|
||||
// Emit() triggers JS which can call destroy() on |this|. It's not safe to
|
||||
// assume that |this| points to valid memory at this point.
|
||||
if (is_main_frame && weak_this)
|
||||
Emit("did-finish-load");
|
||||
}
|
||||
|
||||
|
@ -1092,6 +1096,9 @@ void WebContents::DidFinishNavigation(
|
|||
frame_routing_id = frame_host->GetRoutingID();
|
||||
}
|
||||
if (!navigation_handle->IsErrorPage()) {
|
||||
// FIXME: All the Emit() calls below could potentially result in |this|
|
||||
// being destroyed (by JS listening for the event and calling
|
||||
// webContents.destroy()).
|
||||
auto url = navigation_handle->GetURL();
|
||||
bool is_same_document = navigation_handle->IsSameDocument();
|
||||
if (is_same_document) {
|
||||
|
@ -1345,6 +1352,9 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
|
|||
params.load_type = content::NavigationController::LOAD_TYPE_DATA;
|
||||
}
|
||||
|
||||
// Calling LoadURLWithParams() can trigger JS which destroys |this|.
|
||||
auto weak_this = GetWeakPtr();
|
||||
|
||||
params.transition_type = ui::PAGE_TRANSITION_TYPED;
|
||||
params.should_clear_history_list = true;
|
||||
params.override_user_agent = content::NavigationController::UA_OVERRIDE_TRUE;
|
||||
|
@ -1353,10 +1363,16 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
|
|||
web_contents()->GetController().DiscardNonCommittedEntries();
|
||||
web_contents()->GetController().LoadURLWithParams(params);
|
||||
|
||||
// ⚠️WARNING!⚠️
|
||||
// LoadURLWithParams() triggers JS events which can call destroy() on |this|.
|
||||
// It's not safe to assume that |this| points to valid memory at this point.
|
||||
if (!weak_this)
|
||||
return;
|
||||
|
||||
// Set the background color of RenderWidgetHostView.
|
||||
// We have to call it right after LoadURL because the RenderViewHost is only
|
||||
// created after loading a page.
|
||||
auto* const view = web_contents()->GetRenderWidgetHostView();
|
||||
auto* const view = weak_this->web_contents()->GetRenderWidgetHostView();
|
||||
if (view) {
|
||||
auto* web_preferences = WebContentsPreferences::From(web_contents());
|
||||
std::string color_name;
|
||||
|
|
|
@ -107,15 +107,17 @@ class EventEmitter : public Wrappable<T> {
|
|||
v8::Local<v8::Object> event,
|
||||
Args&&... args) {
|
||||
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
||||
v8::Locker locker(isolate());
|
||||
v8::HandleScope handle_scope(isolate());
|
||||
EmitEvent(isolate(), GetWrapper(), name, event,
|
||||
std::forward<Args>(args)...);
|
||||
auto context = isolate()->GetCurrentContext();
|
||||
// It's possible that |this| will be deleted by EmitEvent, so save anything
|
||||
// we need from |this| before calling EmitEvent.
|
||||
auto* isolate = this->isolate();
|
||||
v8::Locker locker(isolate);
|
||||
v8::HandleScope handle_scope(isolate);
|
||||
auto context = isolate->GetCurrentContext();
|
||||
EmitEvent(isolate, GetWrapper(), name, event, std::forward<Args>(args)...);
|
||||
v8::Local<v8::Value> defaultPrevented;
|
||||
if (event->Get(context, StringToV8(isolate(), "defaultPrevented"))
|
||||
if (event->Get(context, StringToV8(isolate, "defaultPrevented"))
|
||||
.ToLocal(&defaultPrevented)) {
|
||||
return defaultPrevented->BooleanValue(isolate());
|
||||
return defaultPrevented->BooleanValue(isolate);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue