| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_DELEGATE_H_ | |
| 6 #define CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_DELEGATE_H_ | |
| 7 | |
| 8 #include <set> | |
| 9 #include <string> | |
| 10 | |
| 11 #include "base/time/time.h" | |
| 12 #include "extensions/browser/updater/manifest_fetch_data.h" | |
| 13 | |
| 14 class GURL; | |
| 15 | |
| 16 namespace base { | |
| 17 class FilePath; | |
| 18 } | |
| 19 | |
| 20 namespace extensions { | |
| 21 | |
| 22 class ExtensionDownloaderDelegate { | |
| 23 public: | |
| 24 virtual ~ExtensionDownloaderDelegate(); | |
| 25 | |
| 26 // Passed as an argument to ExtensionDownloader::OnExtensionDownloadFailed() | |
| 27 // to detail the reason for the failure. | |
| 28 enum Error { | |
| 29 // Background networking is disabled. | |
| 30 DISABLED, | |
| 31 | |
| 32 // Failed to fetch the manifest for this extension. | |
| 33 MANIFEST_FETCH_FAILED, | |
| 34 | |
| 35 // The manifest couldn't be parsed. | |
| 36 MANIFEST_INVALID, | |
| 37 | |
| 38 // The manifest was fetched and parsed, and there are no updates for | |
| 39 // this extension. | |
| 40 NO_UPDATE_AVAILABLE, | |
| 41 | |
| 42 // There was an update for this extension but the download of the crx | |
| 43 // failed. | |
| 44 CRX_FETCH_FAILED, | |
| 45 }; | |
| 46 | |
| 47 // Passed as an argument to the completion callbacks to signal whether | |
| 48 // the extension update sent a ping. | |
| 49 struct PingResult { | |
| 50 PingResult(); | |
| 51 ~PingResult(); | |
| 52 | |
| 53 // Whether a ping was sent. | |
| 54 bool did_ping; | |
| 55 | |
| 56 // The start of day, from the server's perspective. This is only valid | |
| 57 // when |did_ping| is true. | |
| 58 base::Time day_start; | |
| 59 }; | |
| 60 | |
| 61 // One of the following 3 methods is always invoked for a given extension | |
| 62 // id, if AddExtension() or AddPendingExtension() returned true when that | |
| 63 // extension was added to the ExtensionDownloader. | |
| 64 // To avoid duplicate work, ExtensionDownloader might merge multiple identical | |
| 65 // requests, so there is not necessarily a separate invocation of one of these | |
| 66 // methods for each call to AddExtension/AddPendingExtension. If it is | |
| 67 // important to be able to match up AddExtension calls with | |
| 68 // OnExtensionDownload callbacks, you need to make sure that for every call to | |
| 69 // AddExtension/AddPendingExtension the combination of extension id and | |
| 70 // request id is unique. The OnExtensionDownload related callbacks will then | |
| 71 // be called with all request ids that resulted in that extension being | |
| 72 // checked. | |
| 73 | |
| 74 // Invoked if the extension couldn't be downloaded. |error| contains the | |
| 75 // failure reason. | |
| 76 virtual void OnExtensionDownloadFailed(const std::string& id, | |
| 77 Error error, | |
| 78 const PingResult& ping_result, | |
| 79 const std::set<int>& request_ids); | |
| 80 | |
| 81 // Invoked if the extension had an update available and its crx was | |
| 82 // successfully downloaded to |path|. |ownership_passed| is true if delegate | |
| 83 // should get ownership of the file. | |
| 84 virtual void OnExtensionDownloadFinished( | |
| 85 const std::string& id, | |
| 86 const base::FilePath& path, | |
| 87 bool file_ownership_passed, | |
| 88 const GURL& download_url, | |
| 89 const std::string& version, | |
| 90 const PingResult& ping_result, | |
| 91 const std::set<int>& request_ids) = 0; | |
| 92 | |
| 93 // The remaining methods are used by the ExtensionDownloader to retrieve | |
| 94 // information about extensions from the delegate. | |
| 95 | |
| 96 // Invoked to fill the PingData for the given extension id. Returns false | |
| 97 // if PingData should not be included for this extension's update check | |
| 98 // (this is the default). | |
| 99 virtual bool GetPingDataForExtension(const std::string& id, | |
| 100 ManifestFetchData::PingData* ping); | |
| 101 | |
| 102 // Invoked to get the update url data for this extension's update url, if | |
| 103 // there is any. The default implementation returns an empty string. | |
| 104 virtual std::string GetUpdateUrlData(const std::string& id); | |
| 105 | |
| 106 // Invoked to determine whether extension |id| is currently | |
| 107 // pending installation. | |
| 108 virtual bool IsExtensionPending(const std::string& id) = 0; | |
| 109 | |
| 110 // Invoked to get the current version of extension |id|. Returns false if | |
| 111 // that extension is not installed. | |
| 112 virtual bool GetExtensionExistingVersion(const std::string& id, | |
| 113 std::string* version) = 0; | |
| 114 | |
| 115 // Determines if a given extension should be forced to update and (if so) | |
| 116 // what the source of this forcing is (i.e. what string will be passed | |
| 117 // in |installsource| as part of the update query parameters). The default | |
| 118 // implementation always returns |false|. | |
| 119 virtual bool ShouldForceUpdate(const std::string& id, | |
| 120 std::string* source); | |
| 121 }; | |
| 122 | |
| 123 } // namespace extensions | |
| 124 | |
| 125 #endif // CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_DOWNLOADER_DELEGATE_H_ | |
| OLD | NEW |