Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2735)

Unified Diff: chrome/installer/util/product.h

Issue 6288009: More installer refactoring in the interest of fixing some bugs and cleaning t... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/installer/util/package_unittest.cc ('k') | chrome/installer/util/product.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/util/product.h
===================================================================
--- chrome/installer/util/product.h (revision 72487)
+++ chrome/installer/util/product.h (working copy)
@@ -6,31 +6,21 @@
#define CHROME_INSTALLER_UTIL_PRODUCT_H_
#pragma once
+#include <set>
+#include <string>
#include <vector>
-#include "base/ref_counted.h"
#include "base/scoped_ptr.h"
#include "chrome/installer/util/browser_distribution.h"
-#include "chrome/installer/util/package.h"
class CommandLine;
namespace installer {
-class MasterPreferences;
-}
-namespace installer {
-
+class MasterPreferences;
class Product;
-class Package;
-class PackageProperties;
+class ProductOperations;
-typedef std::vector<scoped_refptr<Package> > Packages;
-typedef std::vector<scoped_refptr<const Product> > Products;
-
-const Product* FindProduct(const Products& products,
- BrowserDistribution::Type type);
-
// Represents an installation of a specific product which has a one-to-one
// relation to a BrowserDistribution. A product has registry settings, related
// installation/uninstallation actions and exactly one Package that represents
@@ -40,23 +30,22 @@
// the future, as we move away from global functions and towards a data driven
// installation, each distribution could derive from this class and provide
// distribution specific functionality.
-class Product : public base::RefCounted<Product> {
+class Product {
public:
- Product(BrowserDistribution* distribution, Package* installation_package);
+ explicit Product(BrowserDistribution* distribution);
+ ~Product();
+
+ void InitializeFromPreferences(const MasterPreferences& prefs);
+
+ void InitializeFromUninstallCommand(const CommandLine& uninstall_command);
+
BrowserDistribution* distribution() const {
return distribution_;
}
- // Returns the install package object for the installation of this product.
- // If the product is installed at system level,the function returns a system
- // wide location (ProgramFiles\Google). Otherwise it returns a package in a
- // user specific location (Users\<user>\Local Settings...)
- const Package& package() const;
-
- // Convenience getter for package().system_level().
- bool system_level() const {
- return package().system_level();
+ bool is_type(BrowserDistribution::Type type) const {
+ return distribution_->GetType() == type;
}
bool is_chrome() const {
@@ -67,6 +56,18 @@
return distribution_->GetType() == BrowserDistribution::CHROME_FRAME;
}
+ bool HasOption(const std::wstring& option) const {
+ return options_.find(option) != options_.end();
+ }
+
+ // Returns true if the set of options is mutated by this operation.
+ bool SetOption(const std::wstring& option, bool set) {
+ if (set)
+ return options_.insert(option).second;
+ else
+ return options_.erase(option) != 0;
+ }
+
// Returns the path to the directory that holds the user data. This is always
// inside "Users\<user>\Local Settings". Note that this is the default user
// data directory and does not take into account that it can be overriden with
@@ -74,7 +75,7 @@
FilePath GetUserDataPath() const;
// Launches Chrome without waiting for it to exit.
- bool LaunchChrome() const;
+ bool LaunchChrome(const FilePath& application_path) const;
// Launches Chrome with given command line, waits for Chrome indefinitely
// (until it terminates), and gets the process exit code if available.
@@ -82,77 +83,44 @@
// The status of Chrome at the return of the function is given by exit_code.
// NOTE: The 'options' CommandLine object should only contain parameters.
// The program part will be ignored.
- bool LaunchChromeAndWait(const CommandLine& options, int32* exit_code) const;
+ bool LaunchChromeAndWait(const FilePath& application_path,
+ const CommandLine& options,
+ int32* exit_code) const;
- // Returns true if this setup process is running as an install managed by an
- // MSI wrapper. There are three things that are checked:
- // 1) the presence of --msi on the command line
- // 2) the presence of "msi": true in the master preferences file
- // 3) the presence of a DWORD value in the ClientState key called msi with
- // value 1
- bool IsMsi() const;
-
// Sets the boolean MSI marker for this installation if set is true or clears
// it otherwise. The MSI marker is stored in the registry under the
// ClientState key.
- bool SetMsiMarker(bool set) const;
+ bool SetMsiMarker(bool system_install, bool set) const;
// Returns true if setup should create an entry in the Add/Remove list
// of installed applications.
bool ShouldCreateUninstallEntry() const;
+ // See ProductOperations::AddKeyFiles.
+ void AddKeyFiles(std::vector<FilePath>* key_files) const;
+
+ // See ProductOperations::AddComDllList.
+ void AddComDllList(std::vector<FilePath>* com_dll_list) const;
+
+ // See ProductOperations::AppendProductFlags.
+ void AppendProductFlags(CommandLine* command_line) const;
+
+ // See Productoperations::SetChannelFlags.
+ bool SetChannelFlags(bool set, ChannelInfo* channel_info) const;
+
protected:
enum CacheStateFlags {
MSI_STATE = 0x01
};
BrowserDistribution* distribution_;
- scoped_refptr<Package> package_;
- mutable bool msi_;
- mutable uint8 cache_state_;
+ scoped_ptr<ProductOperations> operations_;
+ std::set<std::wstring> options_;
private:
- friend class base::RefCounted<Product>;
- ~Product() {
- }
DISALLOW_COPY_AND_ASSIGN(Product);
};
-// A collection of Product objects and related physical installation
-// packages. Each Product is associated with a single installation
-// package object, and each package object is associated with one or more
-// Product objects.
-class ProductPackageMapping {
- public:
- explicit ProductPackageMapping(bool multi_install, bool system_level);
-
- bool multi_install() const {
- return multi_install_;
- }
-
- bool system_level() const {
- return system_level_;
- }
-
- const Packages& packages() const;
-
- const Products& products() const;
-
- bool AddDistribution(BrowserDistribution::Type type,
- const installer::MasterPreferences& prefs);
- bool AddDistribution(BrowserDistribution* distribution);
-
- protected:
- bool multi_install_;
- bool system_level_;
- Packages packages_;
- Products products_;
- scoped_ptr<PackageProperties> package_properties_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ProductPackageMapping);
-};
-
} // namespace installer
#endif // CHROME_INSTALLER_UTIL_PRODUCT_H_
« no previous file with comments | « chrome/installer/util/package_unittest.cc ('k') | chrome/installer/util/product.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698