blob: 51641e1113910a65e4daa3cbabc9b06c1f632606 [file] [log] [blame]
// Copyright 2021 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_EXTENSIONS_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_LACROS_H_
#define CHROME_BROWSER_EXTENSIONS_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_LACROS_H_
#include <vector>
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "chromeos/crosapi/mojom/system_display.mojom.h"
#include "extensions/browser/api/system_display/display_info_provider.h"
#include "extensions/common/api/system_display.h"
#include "mojo/public/cpp/bindings/receiver.h"
namespace extensions {
// DisplayInfoProvider used by lacros-chrome that uses crosapi to:
// * Get DisplayUnitInfoList from ash-chrome, handling potential version skew.
// * Pass display change events from ash-chrome to lacros-chrome.
class DisplayInfoProviderLacros : public DisplayInfoProvider,
public crosapi::mojom::DisplayChangeObserver {
public:
DisplayInfoProviderLacros();
~DisplayInfoProviderLacros() override;
DisplayInfoProviderLacros(const DisplayInfoProviderLacros&) = delete;
const DisplayInfoProviderLacros& operator=(const DisplayInfoProviderLacros&) =
delete;
// DisplayInfoProvider:
void GetAllDisplaysInfo(
bool single_unified,
base::OnceCallback<void(DisplayUnitInfoList)> callback) override;
private:
// Receiver for SystemDisplayAsh::GetDisplayUnitInfoList().
void OnCrosapiResult(
base::OnceCallback<void(DisplayUnitInfoList)> callback,
std::vector<crosapi::mojom::DisplayUnitInfoPtr> src_info_list);
// crosapi::mojom::DisplayChangeObserver:
void OnCrosapiDisplayChanged() override;
// Receives mojo messages from ash-chrome.
mojo::Receiver<crosapi::mojom::DisplayChangeObserver> receiver_{this};
base::WeakPtrFactory<DisplayInfoProviderLacros> weak_ptr_factory_{this};
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_LACROS_H_