blob: 408ad171166bfefabd1c9e80e8a9b804ad3ed766 [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/test/chromedriver/chrome/geolocation_override_manager.h"
#include "base/values.h"
#include "chrome/test/chromedriver/chrome/devtools_client.h"
#include "chrome/test/chromedriver/chrome/geoposition.h"
#include "chrome/test/chromedriver/chrome/status.h"
GeolocationOverrideManager::GeolocationOverrideManager(DevToolsClient* client)
: client_(client) {
client_->AddListener(this);
}
GeolocationOverrideManager::~GeolocationOverrideManager() {
}
Status GeolocationOverrideManager::OverrideGeolocation(
const Geoposition& geoposition) {
overridden_geoposition_.reset(new Geoposition(geoposition));
return ApplyOverrideIfNeeded();
}
Status GeolocationOverrideManager::OnConnected(DevToolsClient* client) {
return ApplyOverrideIfNeeded();
}
Status GeolocationOverrideManager::OnEvent(
DevToolsClient* client,
const std::string& method,
const base::DictionaryValue& params) {
if (method == "Page.frameNavigated") {
const base::Value* unused_value;
if (!params.Get("frame.parentId", &unused_value))
return ApplyOverrideIfNeeded();
}
return Status(kOk);
}
Status GeolocationOverrideManager::ApplyOverrideIfNeeded() {
if (!overridden_geoposition_)
return Status(kOk);
base::DictionaryValue params;
params.SetDouble("latitude", overridden_geoposition_->latitude);
params.SetDouble("longitude", overridden_geoposition_->longitude);
params.SetDouble("accuracy", overridden_geoposition_->accuracy);
return client_->SendCommand("Page.setGeolocationOverride", params);
}