blob: 1002f7e81c54e7af58cb696cac252542df899e3a [file] [log] [blame]
// Copyright 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:math' show Point, Rectangle;
import '../common/request_client.dart';
import '../common/webdriver_handler.dart';
/// Handle to window.
///
/// Upon use, the window will automatically be set as active.
class Window {
final SyncRequestClient _client;
final WebDriverHandler _handler;
final String id;
Window(this._client, this._handler, this.id);
/// Sets the window as active.
void setAsActive() {
_client.send(_handler.window.buildSetActiveRequest(id),
_handler.window.parseSetActiveResponse);
}
/// The location of the window.
Point<int> get location => _client.send(
_handler.window.buildLocationRequest(),
_handler.window.parseLocationResponse);
/// The outer size of the window.
Rectangle<int> get size => _client.send(
_handler.window.buildSizeRequest(), _handler.window.parseSizeResponse);
/// The inner size of the window.
Rectangle<int> get innerSize => _client.send(
_handler.window.buildInnerSizeRequest(),
_handler.window.parseInnerSizeResponse);
/// The location and size of the window.
Rectangle<int> get rect {
try {
return _client.send(_handler.window.buildRectRequest(),
_handler.window.parseRectResponse);
} on UnsupportedError {
// JsonWire cannot implement this API in one call.
// Delegate to other methods.
final location = this.location;
final size = this.size;
return Rectangle<int>(location.x, location.y, size.width, size.height);
}
}
/// Sets the window location.
///
/// TODO(jingbian): Remove this, prefer setter.
void setLocation(Point<int> point) {
location = point;
}
/// Sets the window location.
set location(Point<int> value) {
_client.send(_handler.window.buildSetLocationRequest(value),
_handler.window.parseSetLocationResponse);
}
/// Sets the window size.
///
/// TODO(jingbian): Remove this, prefer setter.
void setSize(Rectangle<int> size) {
this.size = size;
}
/// Sets the window size.
set size(Rectangle<int> value) {
_client.send(_handler.window.buildSetSizeRequest(value),
_handler.window.parseSetSizeResponse);
}
/// The location and size of the window.
set rect(Rectangle<int> value) {
try {
_client.send(_handler.window.buildSetRectRequest(value),
_handler.window.parseSetRectResponse);
return;
} on UnsupportedError {
// JsonWire cannot implement this API in one call.
// Delegate to other methods.
location = value.topLeft;
size = Rectangle(0, 0, value.width, value.height);
}
}
/// Maximizes the window.
void maximize() {
_client.send(_handler.window.buildMaximizeRequest(),
_handler.window.parseMaximizeResponse);
}
/// Minimizes the window.
///
/// Unsupported in JsonWire WebDriver.
void minimize() {
_client.send(_handler.window.buildMinimizeRequest(),
_handler.window.parseMinimizeResponse);
}
/// Closes the window.
void close() {
_client.send(_handler.window.buildCloseRequest(),
_handler.window.parseCloseResponse);
}
@override
int get hashCode => id.hashCode + _client.hashCode;
@override
bool operator ==(other) =>
other is Window &&
other._client == _client &&
other._handler == _handler &&
other.id == id;
@override
String toString() => '$_handler.windows($_client)[$id]';
}