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

Unified Diff: extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc

Issue 2331343005: PlzNavigate: Get StreamPrivate API to work. (Closed)
Patch Set: Remove include file Created 4 years, 3 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: extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc
index 78b76340f07594e71f6b6e7d9303300e5cf9cdd8..16992a3a62a501fc0c178d564ffadbc372de79ab 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc
@@ -8,6 +8,7 @@
#include "base/memory/singleton.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "extensions/browser/extension_registry.h"
@@ -72,19 +73,13 @@ class MimeHandlerStreamManager::EmbedderObserver
: public content::WebContentsObserver {
public:
EmbedderObserver(MimeHandlerStreamManager* stream_manager,
- int render_process_id,
- int render_frame_id,
- const std::string& view_id);
+ const std::string& view_id,
+ content::WebContents* web_contents);
private:
// WebContentsObserver overrides.
- void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override;
- void RenderProcessGone(base::TerminationStatus status) override;
- void DidStartProvisionalLoadForFrame(
- content::RenderFrameHost* render_frame_host,
- const GURL& validated_url,
- bool is_error_page,
- bool is_iframe_srcdoc) override;
+ void DidStartNavigation(
+ content::NavigationHandle* navigation_handle) override;
void WebContentsDestroyed() override;
void AbortStream();
@@ -92,8 +87,6 @@ class MimeHandlerStreamManager::EmbedderObserver
bool IsTrackedRenderFrameHost(content::RenderFrameHost* render_frame_host);
MimeHandlerStreamManager* const stream_manager_;
- const int render_process_id_;
- const int render_frame_id_;
const std::string view_id_;
};
@@ -113,13 +106,12 @@ MimeHandlerStreamManager* MimeHandlerStreamManager::Get(
void MimeHandlerStreamManager::AddStream(
const std::string& view_id,
std::unique_ptr<StreamContainer> stream,
- int render_process_id,
- int render_frame_id) {
+ content::WebContents* web_contents) {
streams_by_extension_id_[stream->extension_id()].insert(view_id);
auto result = streams_.insert(std::make_pair(view_id, std::move(stream)));
DCHECK(result.second);
- embedder_observers_[view_id] = base::MakeUnique<EmbedderObserver>(
- this, render_process_id, render_frame_id, view_id);
+ embedder_observers_[view_id] =
+ base::MakeUnique<EmbedderObserver>(this, view_id, web_contents);
}
std::unique_ptr<StreamContainer> MimeHandlerStreamManager::ReleaseStream(
@@ -153,39 +145,18 @@ void MimeHandlerStreamManager::OnExtensionUnloaded(
MimeHandlerStreamManager::EmbedderObserver::EmbedderObserver(
MimeHandlerStreamManager* stream_manager,
- int render_process_id,
- int render_frame_id,
- const std::string& view_id)
- : WebContentsObserver(content::WebContents::FromRenderFrameHost(
- content::RenderFrameHost::FromID(render_process_id,
- render_frame_id))),
+ const std::string& view_id,
+ content::WebContents* web_contents)
+ : WebContentsObserver(web_contents),
stream_manager_(stream_manager),
- render_process_id_(render_process_id),
- render_frame_id_(render_frame_id),
- view_id_(view_id) {
-}
-
-void MimeHandlerStreamManager::EmbedderObserver::RenderFrameDeleted(
clamy 2016/09/15 13:15:24 RenderFrameDeleted & RenderProcessGone would also
ananta 2016/09/15 21:25:03 I think so. The only issue is the stream would rem
clamy 2016/09/16 11:41:21 Could that potentially lead to wasted memory?
lazyboy 2016/09/16 17:59:45 +1, If the embedder page loads an iframe, and we p
ananta 2016/09/16 23:56:31 I reverted portions of this file to bring back the
- content::RenderFrameHost* render_frame_host) {
- if (!IsTrackedRenderFrameHost(render_frame_host))
- return;
-
- AbortStream();
-}
+ view_id_(view_id) {}
-void MimeHandlerStreamManager::EmbedderObserver::RenderProcessGone(
- base::TerminationStatus status) {
- AbortStream();
-}
-void MimeHandlerStreamManager::EmbedderObserver::
- DidStartProvisionalLoadForFrame(content::RenderFrameHost* render_frame_host,
- const GURL& validated_url,
- bool is_error_page,
- bool is_iframe_srcdoc) {
- if (!IsTrackedRenderFrameHost(render_frame_host))
- return;
-
- AbortStream();
+void MimeHandlerStreamManager::EmbedderObserver::DidStartNavigation(
+ content::NavigationHandle* navigation_handle) {
+ // If the top level frame is navigating away clean up the associated stream.
+ // Please note that the stream may be associated with a child frame.
+ if (navigation_handle->IsInMainFrame())
+ AbortStream();
}
void MimeHandlerStreamManager::EmbedderObserver::WebContentsDestroyed() {
@@ -198,10 +169,4 @@ void MimeHandlerStreamManager::EmbedderObserver::AbortStream() {
stream_manager_->ReleaseStream(view_id_);
}
-bool MimeHandlerStreamManager::EmbedderObserver::IsTrackedRenderFrameHost(
- content::RenderFrameHost* render_frame_host) {
- return render_frame_host->GetRoutingID() == render_frame_id_ &&
- render_frame_host->GetProcess()->GetID() == render_process_id_;
-}
-
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698