diff --git a/atom/browser/api/atom_api_auto_updater.cc b/atom/browser/api/atom_api_auto_updater.cc index cdf3406ae788..a1cd0dd3e2b5 100644 --- a/atom/browser/api/atom_api_auto_updater.cc +++ b/atom/browser/api/atom_api_auto_updater.cc @@ -9,6 +9,7 @@ #include "atom/browser/native_window.h" #include "atom/browser/window_list.h" #include "atom/common/native_mate_converters/callback.h" +#include "atom/common/native_mate_converters/string_map_converter.h" #include "atom/common/node_includes.h" #include "native_mate/dictionary.h" #include "native_mate/object_template_builder.h" @@ -102,7 +103,7 @@ mate::Handle AutoUpdater::Create(v8::Isolate* isolate) { void AutoUpdater::BuildPrototype( v8::Isolate* isolate, v8::Local prototype) { mate::ObjectTemplateBuilder(isolate, prototype) - .SetMethod("setFeedURL", &auto_updater::AutoUpdater::SetFeedURL) + .SetMethod("_setFeedURL", &auto_updater::AutoUpdater::SetFeedURL) .SetMethod("checkForUpdates", &auto_updater::AutoUpdater::CheckForUpdates) .SetMethod("quitAndInstall", &AutoUpdater::QuitAndInstall); } diff --git a/atom/browser/auto_updater.cc b/atom/browser/auto_updater.cc index 7dbfc5a6feba..5a14eda2e147 100644 --- a/atom/browser/auto_updater.cc +++ b/atom/browser/auto_updater.cc @@ -17,7 +17,8 @@ void AutoUpdater::SetDelegate(Delegate* delegate) { } #if !defined(OS_MACOSX) || defined(MAS_BUILD) -void AutoUpdater::SetFeedURL(const std::string& url) { +void AutoUpdater::SetFeedURL(const std::string& url, + const HeaderMap& requestHeaders) { } void AutoUpdater::CheckForUpdates() { diff --git a/atom/browser/auto_updater.h b/atom/browser/auto_updater.h index d13c6f0c3305..ad0b2cc18b9a 100644 --- a/atom/browser/auto_updater.h +++ b/atom/browser/auto_updater.h @@ -5,6 +5,7 @@ #ifndef ATOM_BROWSER_AUTO_UPDATER_H_ #define ATOM_BROWSER_AUTO_UPDATER_H_ +#include #include #include "base/macros.h" @@ -42,11 +43,14 @@ class Delegate { class AutoUpdater { public: + typedef std::map HeaderMap; + // Gets/Sets the delegate. static Delegate* GetDelegate(); static void SetDelegate(Delegate* delegate); - static void SetFeedURL(const std::string& url); + static void SetFeedURL(const std::string& url, + const HeaderMap& requestHeaders); static void CheckForUpdates(); static void QuitAndInstall(); diff --git a/atom/browser/auto_updater_mac.mm b/atom/browser/auto_updater_mac.mm index ab996dda90ab..bf5030b35a33 100644 --- a/atom/browser/auto_updater_mac.mm +++ b/atom/browser/auto_updater_mac.mm @@ -29,16 +29,22 @@ bool g_update_available = false; } // static -void AutoUpdater::SetFeedURL(const std::string& feed) { +void AutoUpdater::SetFeedURL(const std::string& feed, + const HeaderMap& requestHeaders) { + Delegate* delegate = GetDelegate(); + if (!delegate) + return; + + NSURL* url = [NSURL URLWithString:base::SysUTF8ToNSString(feed)]; + NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url]; + + for (auto&& it : requestHeaders) { + [urlRequest setValue:base::SysUTF8ToNSString(it.second) + forHTTPHeaderField:base::SysUTF8ToNSString(it.first)]; + } + if (g_updater == nil) { - Delegate* delegate = GetDelegate(); - if (!delegate) - return; - // Initialize the SQRLUpdater. - NSURL* url = [NSURL URLWithString:base::SysUTF8ToNSString(feed)]; - NSURLRequest* urlRequest = [NSURLRequest requestWithURL:url]; - @try { g_updater = [[SQRLUpdater alloc] initWithUpdateRequest:urlRequest]; } @catch (NSException* error) { @@ -57,6 +63,8 @@ void AutoUpdater::SetFeedURL(const std::string& feed) { delegate->OnUpdateAvailable(); }); }]; + } else { + g_updater.updateRequest = urlRequest; } } diff --git a/atom/common/api/atom_api_crash_reporter.cc b/atom/common/api/atom_api_crash_reporter.cc index e1932ad7f5f0..5db1461f88c0 100644 --- a/atom/common/api/atom_api_crash_reporter.cc +++ b/atom/common/api/atom_api_crash_reporter.cc @@ -6,6 +6,7 @@ #include #include "atom/common/crash_reporter/crash_reporter.h" +#include "atom/common/native_mate_converters/string_map_converter.h" #include "base/bind.h" #include "native_mate/dictionary.h" @@ -15,24 +16,6 @@ using crash_reporter::CrashReporter; namespace mate { -template<> -struct Converter > { - static bool FromV8(v8::Isolate* isolate, - v8::Local val, - std::map* out) { - if (!val->IsObject()) - return false; - - v8::Local dict = val->ToObject(); - v8::Local keys = dict->GetOwnPropertyNames(); - for (uint32_t i = 0; i < keys->Length(); ++i) { - v8::Local key = keys->Get(i); - (*out)[V8ToString(key)] = V8ToString(dict->Get(key)); - } - return true; - } -}; - template<> struct Converter { static v8::Local ToV8(v8::Isolate* isolate, diff --git a/atom/common/native_mate_converters/string_map_converter.h b/atom/common/native_mate_converters/string_map_converter.h new file mode 100644 index 000000000000..54458ab67b31 --- /dev/null +++ b/atom/common/native_mate_converters/string_map_converter.h @@ -0,0 +1,35 @@ +// Copyright (c) 2016 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef ATOM_COMMON_NATIVE_MATE_CONVERTERS_STRING_MAP_CONVERTER_H_ +#define ATOM_COMMON_NATIVE_MATE_CONVERTERS_STRING_MAP_CONVERTER_H_ + +#include +#include + +#include "native_mate/converter.h" + +namespace mate { + +template<> +struct Converter > { + static bool FromV8(v8::Isolate* isolate, + v8::Local val, + std::map* out) { + if (!val->IsObject()) + return false; + + v8::Local dict = val->ToObject(); + v8::Local keys = dict->GetOwnPropertyNames(); + for (uint32_t i = 0; i < keys->Length(); ++i) { + v8::Local key = keys->Get(i); + (*out)[V8ToString(key)] = V8ToString(dict->Get(key)); + } + return true; + } +}; + +} // namespace mate + +#endif // ATOM_COMMON_NATIVE_MATE_CONVERTERS_STRING_MAP_CONVERTER_H_ diff --git a/docs/api/auto-updater.md b/docs/api/auto-updater.md index a2eec31ecbf1..a1752769473f 100644 --- a/docs/api/auto-updater.md +++ b/docs/api/auto-updater.md @@ -94,12 +94,12 @@ On Windows only `releaseName` is available. The `autoUpdater` object has the following methods: -### `autoUpdater.setFeedURL(url)` +### `autoUpdater.setFeedURL(url[, requestHeaders])` * `url` String +* `requestHeaders` Object - HTTP request headers (_OS X_) -Sets the `url` and initialize the auto updater. The `url` cannot be changed -once it is set. +Sets the `url` and initialize the auto updater. ### `autoUpdater.checkForUpdates()` diff --git a/filenames.gypi b/filenames.gypi index 2b87e36fa4d2..ed25a4038a33 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -377,6 +377,7 @@ 'atom/common/native_mate_converters/net_converter.cc', 'atom/common/native_mate_converters/net_converter.h', 'atom/common/native_mate_converters/string16_converter.h', + 'atom/common/native_mate_converters/string_map_converter.h', 'atom/common/native_mate_converters/ui_base_types_converter.h', 'atom/common/native_mate_converters/v8_value_converter.cc', 'atom/common/native_mate_converters/v8_value_converter.h', diff --git a/lib/browser/api/auto-updater/auto-updater-native.js b/lib/browser/api/auto-updater/auto-updater-native.js index 1fff05dbd65c..e2c79a910106 100644 --- a/lib/browser/api/auto-updater/auto-updater-native.js +++ b/lib/browser/api/auto-updater/auto-updater-native.js @@ -3,4 +3,8 @@ const autoUpdater = process.atomBinding('auto_updater').autoUpdater Object.setPrototypeOf(autoUpdater, EventEmitter.prototype) +autoUpdater.setFeedURL = function (url, headers) { + return autoUpdater._setFeedURL(url, headers || {}) +} + module.exports = autoUpdater diff --git a/lib/browser/api/auto-updater/auto-updater-win.js b/lib/browser/api/auto-updater/auto-updater-win.js index 5b1127027e9d..8775534031f4 100644 --- a/lib/browser/api/auto-updater/auto-updater-win.js +++ b/lib/browser/api/auto-updater/auto-updater-win.js @@ -19,7 +19,7 @@ AutoUpdater.prototype.quitAndInstall = function () { return app.quit() } -AutoUpdater.prototype.setFeedURL = function (updateURL) { +AutoUpdater.prototype.setFeedURL = function (updateURL, headers) { this.updateURL = updateURL }