blob: 573d22803cc39ef386e4b45705b4c69ae92091cb [file] [log] [blame] [edit]
// Copyright 2014 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 "config.h"
#include "modules/device_orientation/DeviceOrientationInspectorAgent.h"
#include "core/frame/LocalFrame.h"
#include "core/inspector/InspectorState.h"
#include "core/page/Page.h"
#include "modules/device_orientation/DeviceOrientationController.h"
#include "modules/device_orientation/DeviceOrientationData.h"
namespace blink {
namespace DeviceOrientationInspectorAgentState {
static const char alpha[] = "alpha";
static const char beta[] = "beta";
static const char gamma[] = "gamma";
static const char overrideEnabled[] = "overrideEnabled";
}
// static
PassOwnPtrWillBeRawPtr<DeviceOrientationInspectorAgent> DeviceOrientationInspectorAgent::create(Page* page)
{
return adoptPtrWillBeNoop(new DeviceOrientationInspectorAgent(*page));
}
DeviceOrientationInspectorAgent::~DeviceOrientationInspectorAgent()
{
}
DeviceOrientationInspectorAgent::DeviceOrientationInspectorAgent(Page& page)
: InspectorBaseAgent<DeviceOrientationInspectorAgent, InspectorFrontend::DeviceOrientation>("DeviceOrientation")
, m_page(&page)
{
}
DEFINE_TRACE(DeviceOrientationInspectorAgent)
{
visitor->trace(m_page);
InspectorBaseAgent<DeviceOrientationInspectorAgent, InspectorFrontend::DeviceOrientation>::trace(visitor);
}
DeviceOrientationController& DeviceOrientationInspectorAgent::controller()
{
ASSERT(toLocalFrame(m_page->mainFrame())->document());
return DeviceOrientationController::from(*m_page->deprecatedLocalMainFrame()->document());
}
void DeviceOrientationInspectorAgent::setDeviceOrientationOverride(ErrorString* error, double alpha, double beta, double gamma)
{
m_state->setBoolean(DeviceOrientationInspectorAgentState::overrideEnabled, true);
m_state->setDouble(DeviceOrientationInspectorAgentState::alpha, alpha);
m_state->setDouble(DeviceOrientationInspectorAgentState::beta, beta);
m_state->setDouble(DeviceOrientationInspectorAgentState::gamma, gamma);
controller().setOverride(DeviceOrientationData::create(alpha, beta, gamma));
}
void DeviceOrientationInspectorAgent::clearDeviceOrientationOverride(ErrorString* error)
{
m_state->setBoolean(DeviceOrientationInspectorAgentState::overrideEnabled, false);
controller().clearOverride();
}
void DeviceOrientationInspectorAgent::disable(ErrorString*)
{
m_state->setBoolean(DeviceOrientationInspectorAgentState::overrideEnabled, false);
controller().clearOverride();
}
void DeviceOrientationInspectorAgent::restore()
{
if (m_state->getBoolean(DeviceOrientationInspectorAgentState::overrideEnabled)) {
double alpha = m_state->getDouble(DeviceOrientationInspectorAgentState::alpha);
double beta = m_state->getDouble(DeviceOrientationInspectorAgentState::beta);
double gamma = m_state->getDouble(DeviceOrientationInspectorAgentState::gamma);
controller().setOverride(DeviceOrientationData::create(alpha, beta, gamma));
}
}
void DeviceOrientationInspectorAgent::didCommitLoadForLocalFrame(LocalFrame* frame)
{
// FIXME(dgozman): adapt this for out-of-process iframes.
if (frame != m_page->mainFrame())
return;
// New document in main frame - apply override there.
// No need to cleanup previous one, as it's already gone.
restore();
}
} // namespace blink