Avoid using app API in renderer process for #907

This commit is contained in:
Cheng Zhao 2015-01-04 22:45:51 -08:00
Родитель 3063b5189a
Коммит 895ccf69a7
2 изменённых файлов: 19 добавлений и 28 удалений

Просмотреть файл

@ -2,41 +2,21 @@
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/browser.h"
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "atom/common/node_includes.h"
namespace {
const char* kRequireAppReadyMessage =
"APIs of \"screen\" module can only be used after the \"ready\" event of "
"\"app\" module gets emitted.";
gfx::Point GetCursorScreenPoint(mate::Arguments* args) {
if (!atom::Browser::Get()->is_ready()) {
args->ThrowError(kRequireAppReadyMessage);
return gfx::Point();
}
gfx::Screen* screen = gfx::Screen::GetNativeScreen();
return screen->GetCursorScreenPoint();
}
gfx::Display GetPrimaryDisplay(mate::Arguments* args) {
if (!atom::Browser::Get()->is_ready()) {
args->ThrowError(kRequireAppReadyMessage);
return gfx::Display();
}
gfx::Screen* screen = gfx::Screen::GetNativeScreen();
return screen->GetPrimaryDisplay();
}
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
v8::Handle<v8::Context> context, void* priv) {
gfx::Screen* screen = gfx::Screen::GetNativeScreen();
mate::Dictionary dict(context->GetIsolate(), exports);
dict.SetMethod("getCursorScreenPoint", &GetCursorScreenPoint);
dict.SetMethod("getPrimaryDisplay", &GetPrimaryDisplay);
dict.SetMethod("getCursorScreenPoint",
base::Bind(&gfx::Screen::GetCursorScreenPoint,
base::Unretained(screen)));
dict.SetMethod("getPrimaryDisplay",
base::Bind(&gfx::Screen::GetPrimaryDisplay,
base::Unretained(screen)));
}
} // namespace

Просмотреть файл

@ -1,6 +1,17 @@
binding = process.atomBinding 'screen'
checkAppIsReady = ->
unless process.type is 'renderer' or require('app').isReady()
throw new Error('Can not use screen module before the "ready" event of app module gets emitted')
module.exports =
if process.platform in ['linux', 'win32'] and process.type is 'renderer'
# On Linux we could not access screen in renderer process.
require('remote').require 'screen'
else
process.atomBinding 'screen'
getCursorScreenPoint: ->
checkAppIsReady()
binding.getCursorScreenPoint()
getPrimaryDisplay: ->
checkAppIsReady()
binding.getPrimaryDisplay()