| Index: Source/bindings/v8/custom/V8GeolocationCustom.cpp
|
| diff --git a/Source/bindings/v8/custom/V8GeolocationCustom.cpp b/Source/bindings/v8/custom/V8GeolocationCustom.cpp
|
| index 33a433b398e51df60f07af8d5ccc34e754116e13..d1105e791c5045a467c0ec45cced7431b3bdf3e1 100644
|
| --- a/Source/bindings/v8/custom/V8GeolocationCustom.cpp
|
| +++ b/Source/bindings/v8/custom/V8GeolocationCustom.cpp
|
| @@ -85,13 +85,21 @@ static PassRefPtrWillBeRawPtr<PositionOptions> createPositionOptions(v8::Local<v
|
| double timeoutDouble = timeoutNumber->Value();
|
| // If the value is positive infinity, there's nothing to do.
|
| if (!(std::isinf(timeoutDouble) && timeoutDouble > 0)) {
|
| - v8::Local<v8::Int32> timeoutInt32 = timeoutValue->ToInt32();
|
| - if (timeoutInt32.IsEmpty()) {
|
| - succeeded = false;
|
| - return nullptr;
|
| + unsigned timeout;
|
| + // If the value is over max of unsigned, timeout is max of unsigned.
|
| + if (timeoutDouble >= std::numeric_limits<unsigned>::max()) {
|
| + timeout = std::numeric_limits<unsigned>::max();
|
| + } else if (timeoutDouble <= 0) {
|
| + timeout = 0;
|
| + } else {
|
| + v8::Local<v8::Uint32> timeoutUint32 = timeoutValue->ToUint32();
|
| + if (timeoutUint32.IsEmpty()) {
|
| + succeeded = false;
|
| + return nullptr;
|
| + }
|
| + timeout = timeoutUint32->Value();
|
| }
|
| - // Wrap to int32 and force non-negative to match behavior of window.setTimeout.
|
| - options->setTimeout(max(0, timeoutInt32->Value()));
|
| + options->setTimeout(timeout);
|
| }
|
| }
|
|
|
| @@ -111,13 +119,21 @@ static PassRefPtrWillBeRawPtr<PositionOptions> createPositionOptions(v8::Local<v
|
| // If the value is positive infinity, clear maximumAge.
|
| options->clearMaximumAge();
|
| } else {
|
| - v8::Local<v8::Int32> maximumAgeInt32 = maximumAgeValue->ToInt32();
|
| - if (maximumAgeInt32.IsEmpty()) {
|
| - succeeded = false;
|
| - return nullptr;
|
| + unsigned maximumAge;
|
| + // If the value is over max of unsigned, maximunAge is max of unsigned.
|
| + if (maximumAgeDouble >= std::numeric_limits<unsigned>::max()) {
|
| + maximumAge = std::numeric_limits<unsigned>::max();
|
| + } else if (maximumAgeDouble <= 0) {
|
| + maximumAge = 0;
|
| + } else {
|
| + v8::Local<v8::Uint32> maximumAgeUint32 = maximumAgeValue->ToUint32();
|
| + if (maximumAgeUint32.IsEmpty()) {
|
| + succeeded = false;
|
| + return nullptr;
|
| + }
|
| + maximumAge = maximumAgeUint32->Value();
|
| }
|
| - // Wrap to int32 and force non-negative to match behavior of window.setTimeout.
|
| - options->setMaximumAge(max(0, maximumAgeInt32->Value()));
|
| + options->setMaximumAge(maximumAge);
|
| }
|
| }
|
|
|
|
|