blob: 64c8c6f6833647f8d99e37cfac7b7154acecc787 [file] [log] [blame]
// Copyright 2016 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.
#ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_DEVICE_STORAGE_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_DEVICE_STORAGE_HANDLER_H_
#include <stdint.h>
#include <memory>
#include <vector>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "chrome/browser/browsing_data/site_data_size_collector.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "chromeos/dbus/cryptohome/rpc.pb.h"
#include "components/arc/storage_manager/arc_storage_manager.h"
#include "components/user_manager/user.h"
class Profile;
namespace crostini {
enum class CrostiniResult;
} // namespace crostini
namespace chromeos {
namespace settings {
class StorageHandler : public ::settings::SettingsPageUIHandler {
public:
// Enumeration for device state about remaining space. These values must be
// kept in sync with settings.StorageSpaceState in JS code.
enum StorageSpaceState {
STORAGE_SPACE_NORMAL = 0,
STORAGE_SPACE_LOW = 1,
STORAGE_SPACE_CRITICALLY_LOW = 2,
};
explicit StorageHandler(Profile* profile);
~StorageHandler() override;
// SettingsPageUIHandler implementation.
void RegisterMessages() override;
void OnJavascriptAllowed() override {}
void OnJavascriptDisallowed() override;
private:
// Handlers of JS messages.
void HandleUpdateStorageInfo(const base::ListValue* unused_args);
void HandleOpenDownloads(const base::ListValue* unused_args);
void HandleOpenArcStorage(const base::ListValue* unused_args);
void HandleClearDriveCache(const base::ListValue* unused_args);
// Callback called when clearing Drive cache is done.
void OnClearDriveCacheDone(bool success);
// Requests updating disk space information.
void UpdateSizeStat();
// Callback to update the UI about disk space information.
void OnGetSizeStat(int64_t* total_size, int64_t* available_size);
// Requests updating the size of Downloads directory.
void UpdateDownloadsSize();
// Callback to update the UI about the size of Downloads directory.
void OnGetDownloadsSize(int64_t size);
// Requests updating the size of Drive Cache.
void UpdateDriveCacheSize();
// Callback to update the UI about the size of Drive Cache.
void OnGetDriveCacheSize(int64_t size);
// Requests updating the size of browsing data.
void UpdateBrowsingDataSize();
// Callback to receive the cache size.
void OnGetCacheSize(bool is_upper_limit, int64_t size);
// Callback to update the UI about the size of browsing data.
void OnGetBrowsingDataSize(bool is_site_data, int64_t size);
// Requests updating the space size used by Android apps and cache.
void UpdateAndroidSize();
// Callback to update the UI about Android apps and cache.
void OnGetAndroidSize(bool succeeded, arc::mojom::ApplicationsSizePtr size);
// Requests updating the space size used by Crostini VMs and their apps and
// cache.
void UpdateCrostiniSize();
// Callback to update the UI about Crostini VMs and their apps and cache.
void OnGetCrostiniSize(crostini::CrostiniResult result, int64_t size);
// Requests updating the total size of other users' data.
void UpdateOtherUsersSize();
// Callback to save the fetched user sizes and update the UI.
void OnGetOtherUserSize(base::Optional<cryptohome::BaseReply> reply);
// Total size of cache data in browsing data.
int64_t browser_cache_size_;
// True if we have already received the size of http cache.
bool has_browser_cache_size_;
// Total size of site data in browsing data.
int64_t browser_site_data_size_;
// True if we have already received the size of site data.
bool has_browser_site_data_size_;
// Helper to compute the total size of all types of site date.
std::unique_ptr<SiteDataSizeCollector> site_data_size_collector_;
// The list of other users whose directory sizes will be accumulated as the
// size of "Other users".
user_manager::UserList other_users_;
// Fetched sizes of user directories.
std::vector<int64_t> user_sizes_;
// Flags indicating fetch operations for storage sizes are ongoing.
bool updating_downloads_size_;
bool updating_drive_cache_size_;
bool updating_browsing_data_size_;
bool updating_android_size_;
bool updating_crostini_size_;
bool updating_other_users_size_;
Profile* const profile_;
base::WeakPtrFactory<StorageHandler> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(StorageHandler);
};
} // namespace settings
} // namespace chromeos
#endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_DEVICE_STORAGE_HANDLER_H_