11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef CHROME_BROWSER_EXTENSIONS_WEBSTORE_REINSTALLER_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CHROME_BROWSER_EXTENSIONS_WEBSTORE_REINSTALLER_H_
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/webstore_standalone_installer.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/web_contents_observer.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace extensions {
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Reinstalls an extension from the webstore. This will first prompt the user if
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// they want to reinstall (using the verbase "Repair", since this is our action
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// for repairing corrupted extensions), and, if the user agrees, will uninstall
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// the extension and reinstall it directly from the webstore.
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WebstoreReinstaller : public WebstoreStandaloneInstaller,
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                            public content::WebContentsObserver {
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  WebstoreReinstaller(content::WebContents* web_contents,
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      const std::string& extension_id,
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      const WebstoreStandaloneInstaller::Callback& callback);
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Begin the reinstall process. |callback| (from the constructor) will be
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // called upon completion.
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void BeginReinstall();
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~WebstoreReinstaller();
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // WebstoreStandaloneInstaller:
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CheckRequestorAlive() const OVERRIDE;
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual const GURL& GetRequestorURL() const OVERRIDE;
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool ShouldShowPostInstallUI() const OVERRIDE;
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool ShouldShowAppInstalledBubble() const OVERRIDE;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual content::WebContents* GetWebContents() const OVERRIDE;
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual scoped_refptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const OVERRIDE;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CheckInlineInstallPermitted(
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::DictionaryValue& webstore_data,
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      std::string* error) const OVERRIDE;
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CheckRequestorPermitted(
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::DictionaryValue& webstore_data,
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      std::string* error) const OVERRIDE;
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void InstallUIProceed() OVERRIDE;
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // content::WebContentsObserver:
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void WebContentsDestroyed() OVERRIDE;
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Called once all data from the old extension installation is removed.
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void OnDeletionDone();
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace extensions
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // CHROME_BROWSER_EXTENSIONS_WEBSTORE_REINSTALLER_H_
57