SOAuthorizationSession.h [plain text]
#pragma once
#if HAVE(APP_SSO)
#include <pal/spi/cocoa/AppSSOSPI.h>
#include <wtf/Forward.h>
#include <wtf/RefCounted.h>
#include <wtf/RetainPtr.h>
#include <wtf/WeakObjCPtr.h>
#include <wtf/WeakPtr.h>
OBJC_CLASS SOAuthorization;
namespace API {
class NavigationAction;
}
namespace WebCore {
class ResourceResponse;
}
namespace WebKit {
class WebPageProxy;
enum class SOAuthorizationLoadPolicy : uint8_t;
class SOAuthorizationSession : public RefCounted<SOAuthorizationSession>, public CanMakeWeakPtr<SOAuthorizationSession> {
public:
enum class InitiatingAction : uint8_t {
Redirect,
PopUp,
SubFrame
};
using UICallback = void (^)(BOOL, NSError *);
virtual ~SOAuthorizationSession();
void shouldStart();
void fallBackToWebPath();
void abort();
void complete(NSHTTPURLResponse *, NSData *);
void presentViewController(SOAuthorizationViewController, UICallback);
protected:
enum class State : uint8_t {
Idle,
Active,
Waiting,
Completed
};
SOAuthorizationSession(SOAuthorization *, Ref<API::NavigationAction>&&, WebPageProxy&, InitiatingAction);
void start();
WebPageProxy* page() const { return m_page.get(); }
State state() const { return m_state; }
void setState(State state) { m_state = state; }
const API::NavigationAction* navigationAction() { return m_navigationAction.get(); }
Ref<API::NavigationAction> releaseNavigationAction();
private:
virtual void shouldStartInternal() = 0;
virtual void fallBackToWebPathInternal() = 0;
virtual void abortInternal() = 0;
virtual void completeInternal(const WebCore::ResourceResponse&, NSData *) = 0;
void becomeCompleted();
void dismissViewController();
void continueStartAfterGetAuthorizationHints(const String&);
void continueStartAfterDecidePolicy(const SOAuthorizationLoadPolicy&);
State m_state { State::Idle };
WeakObjCPtr<SOAuthorization *> m_soAuthorization;
RefPtr<API::NavigationAction> m_navigationAction;
WeakPtr<WebPageProxy> m_page;
InitiatingAction m_action;
RetainPtr<SOAuthorizationViewController> m_viewController;
#if PLATFORM(MAC)
RetainPtr<NSWindow> m_sheetWindow;
RetainPtr<NSObject> m_sheetWindowWillCloseObserver;
RetainPtr<NSObject> m_presentingWindowDidDeminiaturizeObserver;
RetainPtr<NSObject> m_applicationDidUnhideObserver;
#endif
};
}
#endif