#include "config.h"
#include "Navigator.h"
#include "CookieJar.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "FrameLoaderClient.h"
#include "Geolocation.h"
#include "Language.h"
#include "MimeTypeArray.h"
#include "Page.h"
#include "PlatformString.h"
#include "PluginArray.h"
#include "PluginData.h"
#include "ScriptController.h"
#include "Settings.h"
namespace WebCore {
Navigator::Navigator(Frame* frame)
: m_frame(frame)
{
}
Navigator::~Navigator()
{
disconnectFrame();
}
void Navigator::disconnectFrame()
{
if (m_plugins) {
m_plugins->disconnectFrame();
m_plugins = 0;
}
if (m_mimeTypes) {
m_mimeTypes->disconnectFrame();
m_mimeTypes = 0;
}
if (m_geolocation) {
m_geolocation->disconnectFrame();
m_geolocation = 0;
}
m_frame = 0;
}
static bool shouldHideFourDot(Frame* frame)
{
const String* sourceURL = frame->script()->sourceURL();
if (!sourceURL)
return false;
if (!(sourceURL->endsWith("/dqm_script.js") || sourceURL->endsWith("/dqm_loader.js") || sourceURL->endsWith("/tdqm_loader.js")))
return false;
Settings* settings = frame->settings();
if (!settings)
return false;
return settings->needsSiteSpecificQuirks();
}
String Navigator::appVersion() const
{
if (!m_frame)
return String();
String appVersion = NavigatorBase::appVersion();
if (shouldHideFourDot(m_frame))
appVersion.replace("4.", "4_");
return appVersion;
}
String Navigator::language() const
{
return defaultLanguage();
}
String Navigator::userAgent() const
{
if (!m_frame)
return String();
return m_frame->loader()->userAgent(m_frame->document() ? m_frame->document()->url() : KURL());
}
PluginArray* Navigator::plugins() const
{
if (!m_plugins)
m_plugins = PluginArray::create(m_frame);
return m_plugins.get();
}
MimeTypeArray* Navigator::mimeTypes() const
{
if (!m_mimeTypes)
m_mimeTypes = MimeTypeArray::create(m_frame);
return m_mimeTypes.get();
}
bool Navigator::cookieEnabled() const
{
if (m_frame->page() && !m_frame->page()->cookieEnabled())
return false;
return cookiesEnabled(m_frame->document());
}
bool Navigator::javaEnabled() const
{
if (!m_frame)
return false;
return m_frame->settings()->isJavaEnabled();
}
Geolocation* Navigator::geolocation() const
{
if (!m_geolocation)
m_geolocation = Geolocation::create(m_frame);
return m_geolocation.get();
}
bool Navigator::standalone() const
{
if (!m_frame)
return false;
Settings* settings = m_frame->settings();
if (!settings)
return false;
return settings->standalone();
}
}