Chromium Code Reviews| Index: chrome/browser/media/router/media_router_dialog_controller.cc |
| diff --git a/chrome/browser/media/router/media_router_dialog_controller.cc b/chrome/browser/media/router/media_router_dialog_controller.cc |
| index d9f80cc75805b71c733e0376807c6da84a604de5..b79ef717157dc4d2e67b3c0da8a3e36a8d0507d5 100644 |
| --- a/chrome/browser/media/router/media_router_dialog_controller.cc |
| +++ b/chrome/browser/media/router/media_router_dialog_controller.cc |
| @@ -4,6 +4,9 @@ |
| #include "chrome/browser/media/router/media_router_dialog_controller.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/browser/web_contents_delegate.h" |
| + |
| #if defined(OS_ANDROID) |
| #include "chrome/browser/media/android/router/media_router_dialog_controller_android.h" |
| #else |
| @@ -24,4 +27,75 @@ MediaRouterDialogController::GetOrCreateForWebContents( |
| #endif |
| } |
| +class MediaRouterDialogController::InitiatorWebContentsObserver |
| + : public content::WebContentsObserver { |
| + public: |
| + InitiatorWebContentsObserver( |
| + content::WebContents* web_contents, |
| + MediaRouterDialogController* dialog_controller) |
| + : content::WebContentsObserver(web_contents), |
| + dialog_controller_(dialog_controller) { |
| + } |
|
imcheng
2015/07/23 00:41:14
DCHECK(dialog_controller_);
whywhat
2015/07/23 21:20:09
Done.
|
| + |
| + private: |
| + void WebContentsDestroyed() override { |
| + // NOTE: |this| is deleted after CloseMediaRouterDialog() returns. |
| + dialog_controller_->CloseMediaRouterDialog(); |
| + } |
| + |
| + void NavigationEntryCommitted( |
| + const content::LoadCommittedDetails& load_details) override { |
| + // NOTE: |this| is deleted after CloseMediaRouterDialog() returns. |
| + dialog_controller_->CloseMediaRouterDialog(); |
| + } |
| + |
| + void RenderProcessGone(base::TerminationStatus status) override { |
| + // NOTE: |this| is deleted after CloseMediaRouterDialog() returns. |
| + dialog_controller_->CloseMediaRouterDialog(); |
| + } |
| + |
| + MediaRouterDialogController* const dialog_controller_; |
| +}; |
| + |
| +MediaRouterDialogController::MediaRouterDialogController( |
| + content::WebContents* initiator) |
| + : initiator_(initiator) { |
| + DCHECK(initiator_); |
| +} |
| + |
| +MediaRouterDialogController::~MediaRouterDialogController() { |
| +} |
| + |
| +void MediaRouterDialogController::ActivateInitiatorWebContents() { |
| + DCHECK(initiator_); |
|
imcheng
2015/07/23 00:41:14
DCHECK not needed as it is already done in ctor.
whywhat
2015/07/23 21:20:09
Done.
|
| + initiator_->GetDelegate()->ActivateContents(initiator_); |
| +} |
| + |
| +void MediaRouterDialogController::CloseMediaRouterDialog() { |
|
imcheng
2015/07/23 00:41:14
isn't this function pure virtual?
whywhat
2015/07/23 21:20:09
Yep, changed that.
|
| + DCHECK(initiator_observer_.get()); |
| + Reset(); |
| +} |
| + |
| +void MediaRouterDialogController::CreateMediaRouterDialog() { |
| + DCHECK(!initiator_observer_.get()); |
| + initiator_observer_.reset(new InitiatorWebContentsObserver( |
|
imcheng
2015/07/23 00:41:13
This function doesn't create the dialog - how abou
whywhat
2015/07/23 21:20:09
Done.
|
| + initiator_, this)); |
| +} |
| + |
| +void MediaRouterDialogController::SetPresentationRequest( |
|
imcheng
2015/07/23 00:41:14
nit: TakePresentationRequest ?
whywhat
2015/07/23 21:20:09
Done.
|
| + scoped_ptr<CreatePresentationSessionRequest> request) { |
| + presentation_request_ = request.Pass(); |
| +} |
| + |
| +scoped_ptr<CreatePresentationSessionRequest> |
| +MediaRouterDialogController::PassPresentationRequest() { |
| + return presentation_request_.Pass(); |
| +} |
| + |
| +void MediaRouterDialogController::Reset() { |
| + DCHECK(initiator_observer_.get()); |
| + initiator_observer_.reset(); |
| + presentation_request_.reset(); |
| +} |
| + |
| } // namespace media_router |