Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2932453002: PlzNavigate: Release StreamHandle. (Closed)
Patch Set: Experiment: Use a RenderFrameObserver. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 07aefd06676f40193fb2648a2981571db64aeae7..e383a06297a468b2df73feb165cdd5468ded940d 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -5126,6 +5126,20 @@ void RenderFrameImpl::FocusedNodeChangedForAccessibility(const WebNode& node) {
render_accessibility()->AccessibilityFocusedNodeChanged(node);
}
+// PlzNavigate: Used to delete the StreamHandle that live on the browser side.
+class StreamHandleDeleter : public RenderFrameObserver {
+ public:
+ StreamHandleDeleter(RenderFrame* render_frame)
+ : RenderFrameObserver(render_frame) {}
+ void OnDestruct() override {}
+ void OnStreamHandleConsumed(const GURL& stream_handle_url) {
+ if (!render_frame())
+ return;
+ static_cast<RenderFrameImpl*>(render_frame())
+ ->StreamHandleConsumed(stream_handle_url);
+ }
+};
+
// PlzNavigate
void RenderFrameImpl::OnCommitNavigation(
const ResourceResponseHead& response,
@@ -5146,6 +5160,16 @@ void RenderFrameImpl::OnCommitNavigation(
stream_override->redirect_responses = request_params.redirect_response;
stream_override->redirect_infos = request_params.redirect_infos;
+ // PlzNavigate: Notify the browser that it can released its |stream_handle_|
+ // when the |stream_override| object is no more used. This is a temporary
+ // solution until mojo is used.
+ stream_override->on_delete = base::BindOnce(
+ [](std::unique_ptr<StreamHandleDeleter> stream_handle_deleter,
+ const GURL& url) {
+ stream_handle_deleter->OnStreamHandleConsumed(url);
clamy 2017/06/09 14:57:42 Why not binding the RenderFrameImpl directly with
arthursonzogni 2017/06/12 09:30:15 I thought base::weak_ptr was sort of the the same
+ },
+ base::MakeUnique<StreamHandleDeleter>(this));
+
if (commit_data.url_loader_factory.is_valid()) {
// Chrome doesn't use interface versioning.
url_loader_factory_.Bind(mojom::URLLoaderFactoryPtrInfo(
@@ -6249,6 +6273,10 @@ void RenderFrameImpl::SyncSelectionIfRequired() {
GetRenderWidget()->UpdateSelectionBounds();
}
+void RenderFrameImpl::StreamHandleConsumed(const GURL& stream_url) {
+ Send(new FrameHostMsg_StreamHandleConsumed(routing_id_, stream_url));
+}
+
void RenderFrameImpl::InitializeUserMediaClient() {
RenderThreadImpl* render_thread = RenderThreadImpl::current();
if (!render_thread) // Will be NULL during unit tests.
« content/browser/frame_host/render_frame_host_impl.h ('K') | « content/renderer/render_frame_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698