1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "config.h"
6#include "modules/device_orientation/DeviceOrientationInspectorAgent.h"
7
8#include "core/frame/LocalFrame.h"
9#include "core/inspector/InspectorController.h"
10#include "core/inspector/InspectorState.h"
11#include "core/page/Page.h"
12
13#include "modules/device_orientation/DeviceOrientationController.h"
14#include "modules/device_orientation/DeviceOrientationData.h"
15
16namespace blink {
17
18namespace DeviceOrientationInspectorAgentState {
19static const char alpha[] = "alpha";
20static const char beta[] = "beta";
21static const char gamma[] = "gamma";
22static const char overrideEnabled[] = "overrideEnabled";
23}
24
25void DeviceOrientationInspectorAgent::provideTo(Page& page)
26{
27    OwnPtrWillBeRawPtr<DeviceOrientationInspectorAgent> deviceOrientationAgent(adoptPtrWillBeNoop(new DeviceOrientationInspectorAgent(page)));
28    page.inspectorController().registerModuleAgent(deviceOrientationAgent.release());
29}
30
31DeviceOrientationInspectorAgent::~DeviceOrientationInspectorAgent()
32{
33}
34
35DeviceOrientationInspectorAgent::DeviceOrientationInspectorAgent(Page& page)
36    : InspectorBaseAgent<DeviceOrientationInspectorAgent>("DeviceOrientation")
37    , m_page(page)
38{
39}
40
41DeviceOrientationController& DeviceOrientationInspectorAgent::controller()
42{
43    ASSERT(toLocalFrame(m_page.mainFrame())->document());
44    return DeviceOrientationController::from(*m_page.deprecatedLocalMainFrame()->document());
45}
46
47void DeviceOrientationInspectorAgent::setDeviceOrientationOverride(ErrorString* error, double alpha, double beta, double gamma)
48{
49    m_state->setBoolean(DeviceOrientationInspectorAgentState::overrideEnabled, true);
50    m_state->setDouble(DeviceOrientationInspectorAgentState::alpha, alpha);
51    m_state->setDouble(DeviceOrientationInspectorAgentState::beta, beta);
52    m_state->setDouble(DeviceOrientationInspectorAgentState::gamma, gamma);
53    controller().setOverride(DeviceOrientationData::create(true, alpha, true, beta, true, gamma));
54}
55
56void DeviceOrientationInspectorAgent::clearDeviceOrientationOverride(ErrorString* error)
57{
58    m_state->setBoolean(DeviceOrientationInspectorAgentState::overrideEnabled, false);
59    controller().clearOverride();
60}
61
62void DeviceOrientationInspectorAgent::clearFrontend()
63{
64    m_state->setBoolean(DeviceOrientationInspectorAgentState::overrideEnabled, false);
65    controller().clearOverride();
66}
67
68void DeviceOrientationInspectorAgent::restore()
69{
70    if (m_state->getBoolean(DeviceOrientationInspectorAgentState::overrideEnabled)) {
71        double alpha = m_state->getDouble(DeviceOrientationInspectorAgentState::alpha);
72        double beta = m_state->getDouble(DeviceOrientationInspectorAgentState::beta);
73        double gamma = m_state->getDouble(DeviceOrientationInspectorAgentState::gamma);
74        controller().setOverride(DeviceOrientationData::create(true, alpha, true, beta, true, gamma));
75    }
76}
77
78void DeviceOrientationInspectorAgent::didCommitLoadForMainFrame()
79{
80    // New document in main frame - apply override there.
81    // No need to cleanup previous one, as it's already gone.
82    restore();
83}
84
85} // namespace blink
86