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/geolocation/PositionOptions.h"
7
8#include "bindings/core/v8/Dictionary.h"
9#include <limits.h>
10
11namespace blink {
12
13PositionOptions* PositionOptions::create(const Dictionary& options)
14{
15    return new PositionOptions(options);
16}
17
18PositionOptions::PositionOptions(const Dictionary& options)
19    : m_highAccuracy(false)
20    , m_maximumAge(0)
21    , m_timeout(std::numeric_limits<unsigned>::max())
22{
23    if (options.hasProperty("enableHighAccuracy")) {
24        bool highAccuracy;
25        if (DictionaryHelper::get(options, "enableHighAccuracy", highAccuracy))
26            m_highAccuracy = highAccuracy;
27    }
28    if (options.hasProperty("maximumAge")) {
29        double maximumAge;
30        if (DictionaryHelper::get(options, "maximumAge", maximumAge)) {
31            if (maximumAge < 0)
32                m_maximumAge = 0;
33            else if (maximumAge > std::numeric_limits<unsigned>::max())
34                m_maximumAge = std::numeric_limits<unsigned>::max();
35            else
36                m_maximumAge = maximumAge;
37        }
38    }
39    if (options.hasProperty("timeout")) {
40        double timeout;
41        if (DictionaryHelper::get(options, "timeout", timeout)) {
42            if (timeout < 0)
43                m_timeout = 0;
44            else if (timeout > std::numeric_limits<unsigned>::max())
45                m_timeout = std::numeric_limits<unsigned>::max();
46            else
47                m_timeout = timeout;
48        }
49    }
50}
51
52} // namespace blink
53