mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
chrome: Update expectations with same-site BFCache enabled (fixes issue #3301)
With same-site BFCache enabled every navigation can now potentially be served via the BFCache. To support this internally a new top-level RenderFrame object may be created for each new navigation. As a result, OnBrowserCreated may now be called multiple times with the same browser ID in a given renderer process (a behavior previously only seen with cross-site navigations and different renderer processes). BFCache navigations do not trigger the same Chromium notifications as a normal load. To avoid breaking CEF API usage expectations we now synthetically generate the load-related callbacks that would otherwise be missing (OnLoadingStateChange with isLoading=true, OnLoadStart, OnLoadEnd). The |httpStatusCode| argument to OnLoadEnd will be 0 in this case. To test: - Run `FrameHandlerTest.*:MessageRouterTest.*:NavigationTest.*` - Run `NavigationTest.LoadSameOriginLoadURL` for OnBrowserCreated behavior. - Run `NavigationTest.History` for load-related callback behavior.
This commit is contained in:
@ -35,6 +35,7 @@
|
||||
#include "content/public/renderer/render_view.h"
|
||||
#include "content/renderer/render_frame_impl.h"
|
||||
#include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
|
||||
#include "third_party/blink/public/mojom/frame/lifecycle.mojom-blink.h"
|
||||
#include "third_party/blink/public/platform/web_back_forward_cache_loader_helper.h"
|
||||
#include "third_party/blink/public/platform/web_data.h"
|
||||
#include "third_party/blink/public/platform/web_string.h"
|
||||
@ -390,7 +391,7 @@ void CefFrameImpl::OnDraggableRegionsChanged() {
|
||||
std::move(regions_arg)));
|
||||
}
|
||||
|
||||
void CefFrameImpl::OnContextCreated() {
|
||||
void CefFrameImpl::OnContextCreated(v8::Local<v8::Context> context) {
|
||||
context_created_ = true;
|
||||
|
||||
CHECK(frame_);
|
||||
@ -399,6 +400,13 @@ void CefFrameImpl::OnContextCreated() {
|
||||
std::move(action.second).Run(frame_);
|
||||
queued_context_actions_.pop();
|
||||
}
|
||||
|
||||
execution_context_lifecycle_state_observer_ =
|
||||
blink_glue::RegisterExecutionContextLifecycleStateObserver(context, this);
|
||||
}
|
||||
|
||||
void CefFrameImpl::OnContextReleased() {
|
||||
execution_context_lifecycle_state_observer_.reset();
|
||||
}
|
||||
|
||||
void CefFrameImpl::OnDetached() {
|
||||
@ -684,6 +692,14 @@ void CefFrameImpl::MoveOrResizeStarted() {
|
||||
}
|
||||
}
|
||||
|
||||
void CefFrameImpl::ContextLifecycleStateChanged(
|
||||
blink::mojom::blink::FrameLifecycleState state) {
|
||||
if (state == blink::mojom::FrameLifecycleState::kFrozen && IsMain() &&
|
||||
blink_glue::IsInBackForwardCache(frame_)) {
|
||||
browser_->OnEnterBFCache();
|
||||
}
|
||||
}
|
||||
|
||||
// Enable deprecation warnings on Windows. See http://crbug.com/585142.
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
#if defined(__clang__)
|
||||
|
Reference in New Issue
Block a user