namespace {
+// The DeprecatedOptionsCheckCallback funtion which is implemented in JavaScript
+using DeprecatedOptionsCheckCallback =
+ base::Callback<std::string(v8::Local<v8::Value>)>;
+DeprecatedOptionsCheckCallback g_deprecated_options_check;
+
void OnCapturePageDone(
v8::Isolate* isolate,
const base::Callback<void(const gfx::Image&)>& callback,
options = mate::Dictionary::CreateEmpty(isolate);
}
+ std::string deprecation_message = g_deprecated_options_check.Run(
+ options.GetHandle());
+ if (deprecation_message.length() > 0) {
+ args->ThrowError(deprecation_message);
+ return nullptr;
+ }
+
return new Window(isolate, options);
}
return v8::Null(isolate);
}
+void SetDeprecatedOptionsCheck(const DeprecatedOptionsCheckCallback& callback) {
+ g_deprecated_options_check = callback;
+}
+
} // namespace api
} // namespace atom
&mate::TrackableObject<Window>::FromWeakMapID);
browser_window.SetMethod("getAllWindows",
&mate::TrackableObject<Window>::GetAll);
+ browser_window.SetMethod("_setDeprecatedOptionsCheck",
+ &atom::api::SetDeprecatedOptionsCheck);
+
mate::Dictionary dict(isolate, exports);
dict.Set("BrowserWindow", browser_window);
BrowserWindow.prototype.__proto__ = EventEmitter.prototype;
BrowserWindow.prototype._init = function() {
-
// avoid recursive require.
var app, menu;
app = require('electron').app;
return (ref1 = this.webContents) != null ? ref1.getTitle() : void 0;
});
+const isDeprecatedKey = function(key) {
+ return key.indexOf('-') >= 0;
+};
+
+// Map deprecated key with hyphens to camel case key
+const getNonDeprecatedKey = function(deprecatedKey) {
+ return deprecatedKey.replace(/-./g, function(match) {
+ return match[1].toUpperCase();
+ });
+};
+
+// TODO Remove for 1.0
+const checkForDeprecatedOptions = function(options) {
+ if (!options) return '';
+
+ let keysToCheck = Object.keys(options);
+ if (options.webPreferences) {
+ keysToCheck = keysToCheck.concat(Object.keys(options.webPreferences));
+ }
+
+ // Check options for keys with hypens in them
+ let deprecatedKey = keysToCheck.filter(isDeprecatedKey)[0];
+ if (deprecatedKey) {
+ try {
+ deprecate.warn(deprecatedKey, getNonDeprecatedKey(deprecatedKey));
+ } catch (error) {
+ // Return error message so it can be rethrown via C++
+ return error.message;
+ }
+ }
+
+ let webPreferenceOption;
+ if (options.hasOwnProperty('nodeIntegration')) {
+ webPreferenceOption = 'nodeIntegration';
+ } else if (options.hasOwnProperty('preload')) {
+ webPreferenceOption = 'preload';
+ } else if (options.hasOwnProperty('zoomFactor')) {
+ webPreferenceOption = 'zoomFactor';
+ }
+ if (webPreferenceOption) {
+ try {
+ deprecate.log(`Setting ${webPreferenceOption} on options is deprecated. Set it on options.webPreferences instead.`);
+ } catch (error) {
+ // Return error message so it can be rethrown via C++
+ return error.message;
+ }
+ }
+
+ return '';
+};
+BrowserWindow._setDeprecatedOptionsCheck(checkForDeprecatedOptions);
+
module.exports = BrowserWindow;