15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/gtest_prod_util.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/version.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_metadata.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/download_interrupt_reasons.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_item.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginInstallerObserver; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WeakPluginInstallerObserver; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass DownloadManager; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebPluginInfo; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginInstaller : public content::DownloadItem::Observer { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum InstallerState { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALLER_STATE_IDLE, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTALLER_STATE_DOWNLOADING, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginInstaller(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PluginInstaller(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDownloadUpdated(content::DownloadItem* download) OVERRIDE; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDownloadDestroyed(content::DownloadItem* download) OVERRIDE; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObserver(PluginInstallerObserver* observer); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveObserver(PluginInstallerObserver* observer); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddWeakObserver(WeakPluginInstallerObserver* observer); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveWeakObserver(WeakPluginInstallerObserver* observer); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallerState state() const { return state_; } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Opens the download URL in a new tab. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OpenDownloadURL(const GURL& plugin_url, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Starts downloading the download URL and opens the downloaded file 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when finished. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartInstalling(const GURL& plugin_url, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void StartInstallingWithDownloadManager( 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const GURL& plugin_url, 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::WebContents* web_contents, 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::DownloadManager* download_manager); 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void DownloadStarted(content::DownloadItem* item, 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::DownloadInterruptReason interrupt_reason); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DownloadError(const std::string& msg); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DownloadCancelled(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallerState state_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<PluginInstallerObserver> observers_; 68424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int strong_observer_count_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<WeakPluginInstallerObserver> weak_observers_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest, 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch StartInstalling_SuccessfulDownload); 730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest, StartInstalling_FailedStart); 740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest, StartInstalling_Interrupted); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PluginInstaller); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_ 79