2020-03-20 14:07:44 +11:00
|
|
|
//! Various enums used throughout the `webview` module.
|
|
|
|
|
|
|
|
use crate::foundation::NSInteger;
|
|
|
|
|
|
|
|
/// Describes a navigation type from within the `WebView`.
|
2020-03-21 12:37:00 +11:00
|
|
|
#[derive(Clone, Copy, Debug)]
|
2020-03-20 14:07:44 +11:00
|
|
|
pub enum NavigationType {
|
|
|
|
/// A user activated a link.
|
|
|
|
LinkActivated,
|
|
|
|
|
|
|
|
/// A user submitted a form.
|
|
|
|
FormSubmitted,
|
|
|
|
|
|
|
|
/// A user went backwards or fowards.
|
|
|
|
BackForward,
|
|
|
|
|
|
|
|
/// A user reloaded the webview.
|
|
|
|
Reload,
|
|
|
|
|
|
|
|
/// A user resubmitted a form.
|
|
|
|
FormResubmitted,
|
|
|
|
|
|
|
|
/// Other.
|
|
|
|
Other
|
|
|
|
}
|
|
|
|
|
2020-03-22 10:46:35 +11:00
|
|
|
// For whatever reason, impl From<> below doesn't generate the reciprocal impl Into<> we need.
|
|
|
|
// So I guess we'll do it ourselves.
|
|
|
|
//
|
|
|
|
// This panic will be removed and is for testing purposes only right now.
|
|
|
|
impl Into<NavigationType> for NSInteger {
|
|
|
|
fn into(self) -> NavigationType {
|
|
|
|
match self {
|
|
|
|
-1 => NavigationType::Other,
|
|
|
|
0 => NavigationType::LinkActivated,
|
|
|
|
1 => NavigationType::FormSubmitted,
|
|
|
|
2 => NavigationType::BackForward,
|
|
|
|
3 => NavigationType::Reload,
|
|
|
|
4 => NavigationType::FormResubmitted,
|
|
|
|
_ => { panic!("Unsupported WKWebView NavigationType value found!"); }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-21 12:37:00 +11:00
|
|
|
impl From<NavigationType> for NSInteger {
|
|
|
|
fn from(nav_type: NavigationType) -> Self {
|
|
|
|
match nav_type {
|
|
|
|
NavigationType::Other => -1,
|
|
|
|
NavigationType::LinkActivated => 0,
|
|
|
|
NavigationType::FormSubmitted => 1,
|
|
|
|
NavigationType::BackForward => 2,
|
|
|
|
NavigationType::Reload => 3,
|
|
|
|
NavigationType::FormResubmitted => 4
|
2020-03-20 14:07:44 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Describes the policy for a given navigation.
|
2020-03-21 12:37:00 +11:00
|
|
|
#[derive(Clone, Copy, Debug)]
|
2020-03-20 14:07:44 +11:00
|
|
|
pub enum NavigationPolicy {
|
|
|
|
/// Should be canceled.
|
|
|
|
Cancel,
|
|
|
|
|
|
|
|
/// Allowed.
|
|
|
|
Allow
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<NavigationPolicy> for NSInteger {
|
2020-03-21 12:37:00 +11:00
|
|
|
fn from(policy: NavigationPolicy) -> Self {
|
|
|
|
match policy {
|
2020-03-20 14:07:44 +11:00
|
|
|
NavigationPolicy::Cancel => 0,
|
|
|
|
NavigationPolicy::Allow => 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Describes a response policy for a given navigation.
|
2020-03-21 12:37:00 +11:00
|
|
|
#[derive(Clone, Copy, Debug)]
|
2020-03-20 14:07:44 +11:00
|
|
|
pub enum NavigationResponsePolicy {
|
|
|
|
/// Should be canceled.
|
|
|
|
Cancel,
|
|
|
|
|
|
|
|
/// Allowed.
|
|
|
|
Allow,
|
|
|
|
|
|
|
|
/// This is a private API, and likely won't make it into the App Store. Will only be available
|
|
|
|
/// if you opt in via the `webview-downloading` feature.
|
|
|
|
#[cfg(feature = "webview-downloading")]
|
|
|
|
BecomeDownload
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<NavigationResponsePolicy> for NSInteger {
|
2020-03-21 12:37:00 +11:00
|
|
|
fn from(policy: NavigationResponsePolicy) -> Self {
|
|
|
|
match policy {
|
2020-03-20 14:07:44 +11:00
|
|
|
NavigationResponsePolicy::Cancel => 0,
|
|
|
|
NavigationResponsePolicy::Allow => 1,
|
|
|
|
|
|
|
|
#[cfg(feature = "webview-downloading")]
|
|
|
|
NavigationResponsePolicy::BecomeDownload => 2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Dictates where a given user script should be injected.
|
2020-03-21 12:37:00 +11:00
|
|
|
#[derive(Clone, Copy, Debug)]
|
2020-03-20 14:07:44 +11:00
|
|
|
pub enum InjectAt {
|
|
|
|
/// Inject at the start of the document.
|
|
|
|
Start = 0,
|
|
|
|
|
|
|
|
/// Inject at the end of the document.
|
|
|
|
End = 1
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<InjectAt> for NSInteger {
|
|
|
|
fn from(at: InjectAt) -> Self {
|
|
|
|
match at {
|
|
|
|
InjectAt::Start => 0,
|
|
|
|
InjectAt::End => 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|