diff --git a/browser/api/atom_api_app.cc b/browser/api/atom_api_app.cc index 909bff3950c7..23c84a5b3038 100644 --- a/browser/api/atom_api_app.cc +++ b/browser/api/atom_api_app.cc @@ -108,6 +108,19 @@ v8::Handle App::GetVersion(const v8::Arguments &args) { return v8::String::New(version.data(), version.size()); } +// static +v8::Handle App::SetVersion(const v8::Arguments &args) { + v8::HandleScope scope; + + std::string version; + if (!FromV8Arguments(args, &version)) + return node::ThrowError("Bad argument"); + + Browser::Get()->SetVersion(version); + + return v8::Undefined(); +} + // static v8::Handle App::AppendSwitch(const v8::Arguments &args) { v8::HandleScope scope; @@ -190,6 +203,7 @@ void App::Initialize(v8::Handle target) { NODE_SET_PROTOTYPE_METHOD(t, "terminate", Terminate); NODE_SET_PROTOTYPE_METHOD(t, "focus", Focus); NODE_SET_PROTOTYPE_METHOD(t, "getVersion", GetVersion); + NODE_SET_PROTOTYPE_METHOD(t, "setVersion", SetVersion); target->Set(v8::String::NewSymbol("Application"), t->GetFunction()); diff --git a/browser/api/atom_api_app.h b/browser/api/atom_api_app.h index 04b70eb78f91..f5685a77fc55 100644 --- a/browser/api/atom_api_app.h +++ b/browser/api/atom_api_app.h @@ -40,6 +40,7 @@ class App : public EventEmitter, static v8::Handle Terminate(const v8::Arguments &args); static v8::Handle Focus(const v8::Arguments &args); static v8::Handle GetVersion(const v8::Arguments &args); + static v8::Handle SetVersion(const v8::Arguments &args); static v8::Handle AppendSwitch(const v8::Arguments &args); static v8::Handle AppendArgument(const v8::Arguments &args); diff --git a/browser/browser.cc b/browser/browser.cc index c4a2d50cdf8f..1bb7e66e3dd8 100644 --- a/browser/browser.cc +++ b/browser/browser.cc @@ -33,6 +33,20 @@ void Browser::Quit() { window_list->CloseAllWindows(); } +std::string Browser::GetVersion() const { + if (version_override_.empty()) { + std::string version = GetExecutableFileVersion(); + if (!version.empty()) + return version; + } + + return version_override_; +} + +void Browser::SetVersion(const std::string& version) { + version_override_ = version; +} + bool Browser::OpenFile(const std::string& file_path) { bool prevent_default = false; FOR_EACH_OBSERVER(BrowserObserver, diff --git a/browser/browser.h b/browser/browser.h index c715dfe1c618..e66076b227c3 100644 --- a/browser/browser.h +++ b/browser/browser.h @@ -31,7 +31,10 @@ class Browser : public WindowListObserver { void Focus(); // Returns the version of the executable (or bundle). - std::string GetVersion(); + std::string GetVersion() const; + + // Overrides the application version. + void SetVersion(const std::string& version); #if defined(OS_MACOSX) // Bounce the dock icon. @@ -68,6 +71,9 @@ class Browser : public WindowListObserver { bool is_quiting() const { return is_quiting_; } protected: + // Returns the version of application bundle or executable file. + std::string GetExecutableFileVersion() const; + // Send the will-quit message and then terminate the application. void NotifyAndTerminate(); @@ -84,6 +90,8 @@ class Browser : public WindowListObserver { // Observers of the browser. ObserverList observers_; + std::string version_override_; + DISALLOW_COPY_AND_ASSIGN(Browser); }; diff --git a/browser/browser_mac.mm b/browser/browser_mac.mm index 95ce57e1d1bd..3d01c94d5db8 100644 --- a/browser/browser_mac.mm +++ b/browser/browser_mac.mm @@ -19,7 +19,7 @@ void Browser::Focus() { [[AtomApplication sharedApplication] activateIgnoringOtherApps:YES]; } -std::string Browser::GetVersion() { +std::string Browser::GetExecutableFileVersion() const { NSDictionary* infoDictionary = base::mac::OuterBundle().infoDictionary; NSString *version = [infoDictionary objectForKey:@"CFBundleVersion"]; return base::SysNSStringToUTF8(version); diff --git a/browser/browser_win.cc b/browser/browser_win.cc index 1948abff5cb4..7256f7e4666a 100644 --- a/browser/browser_win.cc +++ b/browser/browser_win.cc @@ -43,7 +43,7 @@ void Browser::Focus() { EnumWindows(&WindowsEnumerationHandler, reinterpret_cast(&pid)); } -std::string Browser::GetVersion() { +std::string Browser::GetExecutableFileVersion() const { base::FilePath path; if (PathService::Get(base::FILE_EXE, &path)) { scoped_ptr version_info(