|  | // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "components/app_modal/app_modal_dialog.h" | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/run_loop.h" | 
|  | #include "components/app_modal/app_modal_dialog_queue.h" | 
|  | #include "components/app_modal/native_app_modal_dialog.h" | 
|  |  | 
|  | using content::WebContents; | 
|  |  | 
|  | namespace app_modal { | 
|  | namespace { | 
|  |  | 
|  | AppModalDialogObserver* app_modal_dialog_observer = NULL; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | AppModalDialogObserver::AppModalDialogObserver() { | 
|  | DCHECK(!app_modal_dialog_observer); | 
|  | app_modal_dialog_observer = this; | 
|  | } | 
|  |  | 
|  | AppModalDialogObserver::~AppModalDialogObserver() { | 
|  | DCHECK(app_modal_dialog_observer); | 
|  | app_modal_dialog_observer = NULL; | 
|  | } | 
|  |  | 
|  | AppModalDialog::AppModalDialog(WebContents* web_contents, | 
|  | const base::string16& title) | 
|  | : title_(title), | 
|  | completed_(false), | 
|  | valid_(true), | 
|  | native_dialog_(NULL), | 
|  | web_contents_(web_contents) { | 
|  | } | 
|  |  | 
|  | AppModalDialog::~AppModalDialog() { | 
|  | CompleteDialog(); | 
|  | } | 
|  |  | 
|  | void AppModalDialog::ShowModalDialog() { | 
|  | native_dialog_ = CreateNativeDialog(); | 
|  | native_dialog_->ShowAppModalDialog(); | 
|  | if (app_modal_dialog_observer) | 
|  | app_modal_dialog_observer->Notify(this); | 
|  | } | 
|  |  | 
|  | bool AppModalDialog::IsValid() { | 
|  | return valid_; | 
|  | } | 
|  |  | 
|  | void AppModalDialog::Invalidate() { | 
|  | valid_ = false; | 
|  | } | 
|  |  | 
|  | bool AppModalDialog::IsJavaScriptModalDialog() { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | void AppModalDialog::ActivateModalDialog() { | 
|  | DCHECK(native_dialog_); | 
|  | native_dialog_->ActivateAppModalDialog(); | 
|  | } | 
|  |  | 
|  | void AppModalDialog::CloseModalDialog() { | 
|  | DCHECK(native_dialog_); | 
|  | native_dialog_->CloseAppModalDialog(); | 
|  | } | 
|  |  | 
|  | void AppModalDialog::CompleteDialog() { | 
|  | if (!completed_) { | 
|  | completed_ = true; | 
|  | AppModalDialogQueue::GetInstance()->ShowNextDialog(); | 
|  | } | 
|  | } | 
|  |  | 
|  | }  // namespace app_modal |