blob: 436e7a8ce5b9b3424c807f5807b955c270d9b531 [file] [log] [blame]
// Copyright 2015 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:async';
import 'dart:math';
import '../common/request_client.dart';
import '../common/webdriver_handler.dart';
class Window {
final AsyncRequestClient _client;
final WebDriverHandler _handler;
final String id;
Window(this._client, this._handler, this.id);
/// Sets the window as active.
Future<void> setAsActive() => _client.send(
_handler.window.buildSetActiveRequest(id),
_handler.window.parseSetActiveResponse);
/// The location of the window.
Future<Point<int>> get location => _client.send(
_handler.window.buildLocationRequest(),
_handler.window.parseLocationResponse);
/// The outer size of the window.
Future<Rectangle<int>> get size => _client.send(
_handler.window.buildSizeRequest(), _handler.window.parseSizeResponse);
/// The inner size of the window.
Future<Rectangle<int>> get innerSize => _client.send(
_handler.window.buildInnerSizeRequest(),
_handler.window.parseInnerSizeResponse);
/// The location and size of the window.
Future<Rectangle<int>> get rect async {
try {
return await _client.send(_handler.window.buildRectRequest(),
_handler.window.parseRectResponse);
} on UnsupportedError {
// JsonWire cannot implement this API in one call.
// Delegate to other methods.
final location = await this.location;
final size = await this.size;
return Rectangle<int>(location.x, location.y, size.width, size.height);
}
}
/// Sets the window location.
Future<void> setLocation(Point<int> point) => _client.send(
_handler.window.buildSetLocationRequest(point),
_handler.window.parseSetLocationResponse);
/// Sets the window size.
Future<void> setSize(Rectangle<int> size) => _client.send(
_handler.window.buildSetSizeRequest(size),
_handler.window.parseSetSizeResponse);
/// The location and size of the window.
Future<void> setRect(Rectangle<int> rect) async {
try {
await _client.send(_handler.window.buildSetRectRequest(rect),
_handler.window.parseSetRectResponse);
return;
} on UnsupportedError {
// JsonWire cannot implement this API in one call.
// Delegate to other methods.
await setLocation(rect.topLeft);
await setSize(Rectangle(0, 0, rect.width, rect.height));
}
}
/// Maximizes the window.
Future<void> maximize() => _client.send(
_handler.window.buildMaximizeRequest(),
_handler.window.parseMaximizeResponse);
/// Minimizes the window.
///
/// Unsupported in JsonWire WebDriver.
Future<void> minimize() => _client.send(
_handler.window.buildMinimizeRequest(),
_handler.window.parseMinimizeResponse);
/// Closes the window.
Future 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]';
}