blob: be07a62958a6bb1a4b4e2eaebe31d7605e2b55ba [file] [log] [blame]
// Copyright 2022 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef COBALT_XHR_XHR_SETTINGS_H_
#define COBALT_XHR_XHR_SETTINGS_H_
#include <string>
#include "base/optional.h"
#include "base/synchronization/lock.h"
namespace cobalt {
namespace xhr {
// Holds browser wide settings for XMLHttpRequest. Their default values are set
// in XMLHttpRequest related classes, and the default values will be overridden
// if the return values of the member functions are non-empty.
// Please refer to where these functions are called for the particular
// XMLHttpRequest behaviors being controlled by them.
class XhrSettings {
public:
virtual base::Optional<bool> IsFetchBufferPoolEnabled() const = 0;
virtual base::Optional<int> GetDefaultFetchBufferSize() const = 0;
virtual base::Optional<bool> IsTryLockForProgressCheckEnabled() const = 0;
protected:
XhrSettings() = default;
~XhrSettings() = default;
XhrSettings(const XhrSettings&) = delete;
XhrSettings& operator=(const XhrSettings&) = delete;
};
// Allows setting the values of XMLHttpRequest settings via a name and an int
// value.
// This class is thread safe.
class XhrSettingsImpl : public XhrSettings {
public:
base::Optional<bool> IsFetchBufferPoolEnabled() const override {
base::AutoLock auto_lock(lock_);
return is_fetch_buffer_pool_enabled_;
}
base::Optional<int> GetDefaultFetchBufferSize() const override {
base::AutoLock auto_lock(lock_);
return default_fetch_buffer_size_;
}
base::Optional<bool> IsTryLockForProgressCheckEnabled() const override {
base::AutoLock auto_lock(lock_);
return is_try_lock_for_progress_check_enabled_;
}
bool Set(const std::string& name, int32_t value) {
if (name == "XHR.EnableFetchBufferPool") {
if (value == 0 || value == 1) {
LOG(INFO) << name << ": set to " << value;
base::AutoLock auto_lock(lock_);
is_fetch_buffer_pool_enabled_ = value != 0;
return true;
}
} else if (name == "XHR.DefaultFetchBufferSize") {
if (value > 0) {
LOG(INFO) << name << ": set to " << value;
base::AutoLock auto_lock(lock_);
default_fetch_buffer_size_ = value;
return true;
}
} else if (name == "XHR.EnableTryLockForProgressCheck") {
if (value == 0 || value == 1) {
LOG(INFO) << name << ": set to " << value;
base::AutoLock auto_lock(lock_);
is_try_lock_for_progress_check_enabled_ = value != 0;
return true;
}
}
return false;
}
private:
mutable base::Lock lock_;
base::Optional<bool> is_fetch_buffer_pool_enabled_;
base::Optional<int> default_fetch_buffer_size_;
base::Optional<bool> is_try_lock_for_progress_check_enabled_;
};
} // namespace xhr
} // namespace cobalt
#endif // COBALT_XHR_XHR_SETTINGS_H_