blob: 950ae937e9db4b624a678db6e8f8f5de442f5965 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PERMISSIONS_TEST_PERMISSION_REQUEST_OBSERVER_H_
#define COMPONENTS_PERMISSIONS_TEST_PERMISSION_REQUEST_OBSERVER_H_
#include "base/run_loop.h"
#include "base/scoped_observation.h"
#include "components/permissions/permission_request_manager.h"
namespace permissions {
// Observer for use in tests that want to detect whether a permission request
// was shown. Can be used in a blocking or non-blocking way.
class PermissionRequestObserver : public PermissionRequestManager::Observer {
public:
explicit PermissionRequestObserver(content::WebContents* web_contents);
PermissionRequestObserver(const PermissionRequestObserver&) = delete;
PermissionRequestObserver& operator=(const PermissionRequestObserver&) =
delete;
~PermissionRequestObserver() override;
bool request_shown() const { return request_shown_; }
bool is_view_recreate_failed() const { return is_view_recreate_failed_; }
bool is_prompt_show_failed_hidden_tab() const {
return is_prompt_show_failed_hidden_tab_;
}
// Blocks until a request is shown.
void Wait();
// PermissionRequestManager::Observer:
void OnPromptAdded() override;
void OnRequestsFinalized() override;
void OnPromptRecreateViewFailed() override;
void OnPromptCreationFailedHiddenTab() override;
void OnPermissionRequestManagerDestructed() override;
private:
base::ScopedObservation<PermissionRequestManager,
PermissionRequestManager::Observer>
observation_{this};
base::RunLoop loop_;
bool request_shown_ = false;
bool is_view_recreate_failed_ = false;
bool is_prompt_show_failed_hidden_tab_ = false;
};
} // namespace permissions
#endif // COMPONENTS_PERMISSIONS_TEST_PERMISSION_REQUEST_OBSERVER_H_