Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / file_manager / app_installer.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/file_manager/app_installer.h"
6
7 #include "content/public/browser/web_contents.h"
8
9 class Profile;
10
11 namespace file_manager {
12
13 namespace {
14 const char kWebContentsDestroyedError[] = "WebContents is destroyed.";
15 }  // namespace
16
17 class AppInstaller::WebContentsObserver
18     : public content::WebContentsObserver {
19
20  public:
21   explicit WebContentsObserver(
22       content::WebContents* web_contents,
23       AppInstaller* parent)
24       : content::WebContentsObserver(web_contents),
25         parent_(parent) {
26   }
27
28  protected:
29   // content::WebContentsObserver implementation.
30   virtual void WebContentsDestroyed(
31       content::WebContents* web_contents) OVERRIDE {
32     parent_->OnWebContentsDestroyed(web_contents);
33   }
34
35  private:
36   AppInstaller* parent_;
37
38   DISALLOW_IMPLICIT_CONSTRUCTORS(WebContentsObserver);
39 };
40
41 AppInstaller::AppInstaller(
42     content::WebContents* web_contents,
43     const std::string& webstore_item_id,
44     Profile* profile,
45     const Callback& callback)
46     : extensions::WebstoreStandaloneInstaller(
47           webstore_item_id,
48           profile,
49           callback),
50       callback_(callback),
51       web_contents_(web_contents),
52       web_contents_observer_(new WebContentsObserver(web_contents, this)) {
53 }
54
55 AppInstaller::~AppInstaller() {}
56
57 bool AppInstaller::CheckRequestorAlive() const {
58   // The tab may have gone away - cancel installation in that case.
59   return web_contents_ != NULL;
60 }
61
62 const GURL& AppInstaller::GetRequestorURL() const {
63   return GURL::EmptyGURL();
64 }
65
66 scoped_ptr<ExtensionInstallPrompt::Prompt>
67 AppInstaller::CreateInstallPrompt() const {
68   scoped_ptr<ExtensionInstallPrompt::Prompt> prompt(
69       new ExtensionInstallPrompt::Prompt(
70           ExtensionInstallPrompt::INLINE_INSTALL_PROMPT));
71
72   prompt->SetWebstoreData(localized_user_count(),
73                           show_user_count(),
74                           average_rating(),
75                           rating_count());
76   return prompt.Pass();
77 }
78
79 bool AppInstaller::ShouldShowPostInstallUI() const {
80   return false;
81 }
82
83 bool AppInstaller::ShouldShowAppInstalledBubble() const {
84   return false;
85 }
86
87 content::WebContents* AppInstaller::GetWebContents() const {
88   return web_contents_;
89 }
90
91 bool AppInstaller::CheckInlineInstallPermitted(
92     const base::DictionaryValue& webstore_data,
93     std::string* error) const {
94   DCHECK(error != NULL);
95   DCHECK(error->empty());
96   return true;
97 }
98
99 bool AppInstaller::CheckRequestorPermitted(
100     const base::DictionaryValue& webstore_data,
101     std::string* error) const {
102   DCHECK(error != NULL);
103   DCHECK(error->empty());
104   return true;
105 }
106
107 void AppInstaller::OnWebContentsDestroyed(
108     content::WebContents* web_contents) {
109   callback_.Run(false, kWebContentsDestroyedError);
110   AbortInstall();
111 }
112
113 }  // namespace file_manager