Avoid using app API in renderer process for #907
This commit is contained in:
parent
3063b5189a
commit
895ccf69a7
2 changed files with 19 additions and 28 deletions
|
@ -2,41 +2,21 @@
|
||||||
// Use of this source code is governed by the MIT license that can be
|
// Use of this source code is governed by the MIT license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "atom/browser/browser.h"
|
|
||||||
#include "atom/common/native_mate_converters/gfx_converter.h"
|
#include "atom/common/native_mate_converters/gfx_converter.h"
|
||||||
#include "atom/common/node_includes.h"
|
#include "atom/common/node_includes.h"
|
||||||
|
|
||||||
namespace {
|
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,
|
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
|
||||||
v8::Handle<v8::Context> context, void* priv) {
|
v8::Handle<v8::Context> context, void* priv) {
|
||||||
|
gfx::Screen* screen = gfx::Screen::GetNativeScreen();
|
||||||
mate::Dictionary dict(context->GetIsolate(), exports);
|
mate::Dictionary dict(context->GetIsolate(), exports);
|
||||||
dict.SetMethod("getCursorScreenPoint", &GetCursorScreenPoint);
|
dict.SetMethod("getCursorScreenPoint",
|
||||||
dict.SetMethod("getPrimaryDisplay", &GetPrimaryDisplay);
|
base::Bind(&gfx::Screen::GetCursorScreenPoint,
|
||||||
|
base::Unretained(screen)));
|
||||||
|
dict.SetMethod("getPrimaryDisplay",
|
||||||
|
base::Bind(&gfx::Screen::GetPrimaryDisplay,
|
||||||
|
base::Unretained(screen)));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // 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 =
|
module.exports =
|
||||||
if process.platform in ['linux', 'win32'] and process.type is 'renderer'
|
if process.platform in ['linux', 'win32'] and process.type is 'renderer'
|
||||||
# On Linux we could not access screen in renderer process.
|
# On Linux we could not access screen in renderer process.
|
||||||
require('remote').require 'screen'
|
require('remote').require 'screen'
|
||||||
else
|
else
|
||||||
process.atomBinding 'screen'
|
getCursorScreenPoint: ->
|
||||||
|
checkAppIsReady()
|
||||||
|
binding.getCursorScreenPoint()
|
||||||
|
getPrimaryDisplay: ->
|
||||||
|
checkAppIsReady()
|
||||||
|
binding.getPrimaryDisplay()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue