15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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_COMMON_CHROME_VERSION_INFO_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_COMMON_CHROME_VERSION_INFO_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileVersionInfo;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An instance of chrome::VersionInfo has information about the
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// current running build of Chrome.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VersionInfo {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The possible channels for an installation, from most fun to most stable.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Channel {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHANNEL_UNKNOWN = 0,  // Probably blue
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHANNEL_CANARY,       // Yellow
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHANNEL_DEV,          // Technicolor
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHANNEL_BETA,         // Rainbow
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHANNEL_STABLE        // Full-spectrum
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VersionInfo();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~VersionInfo();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In the rare case where we fail to get the version info,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is_valid() will return false.  The other functions will return
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the empty string in this case, so it's not harmful if you don't
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // check is_valid().
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_valid() const;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // E.g. "Chrome/a.b.c.d"
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string ProductNameAndVersionForUserAgent() const;
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // E.g. "Chromium" or "Google Chrome".
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string Name() const;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Version number, e.g. "6.0.490.1".
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string Version() const;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The SVN revision of this release.  E.g. "55800".
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string LastChange() const;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether this is an "official" release of the current Version():
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // whether knowing Version() is enough to completely determine what
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // LastChange() is.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsOfficialBuild() const;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OS type. E.g. "Windows", "Linux", "FreeBSD", ...
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string OSType() const;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a human-readable modifier for the version string. For a branded
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // build, this modifier is the channel ("canary", "dev", or "beta", but ""
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for stable). On Windows, this may be modified with additional information
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // after a hyphen. For multi-user installations, it will return "canary-m",
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // "dev-m", "beta-m", and for a stable channel multi-user installation, "m".
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In branded builds, when the channel cannot be determined, "unknown" will
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be returned. In unbranded builds, the modifier is usually an empty string
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (""), although on Linux, it may vary in certain distributions.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GetVersionStringModifier() is intended to be used for display purposes.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // To simply test the channel, use GetChannel().
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string GetVersionStringModifier();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the channel for the installation. In branded builds, this will be
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CHANNEL_STABLE, CHANNEL_BETA, CHANNEL_DEV, or CHANNEL_CANARY. In unbranded
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // builds, or in branded builds when the channel cannot be determined, this
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // will be CHANNEL_UNKNOWN.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static Channel GetChannel();
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets channel before use.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void SetChannel(const std::string& channel);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a version string to be displayed in "About Chromium" dialog.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string CreateVersionString() const;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<FileVersionInfo> version_info_;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VersionInfo);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_COMMON_CHROME_VERSION_INFO_H_
96