JSNavigatorCustom.cpp [plain text]
#include "config.h"
#include "JSNavigator.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "KURL.h"
#include "Navigator.h"
#include "Settings.h"
namespace WebCore {
using namespace JSC;
static bool needsYouTubeQuirk(ExecState*, Frame*);
#if 1
static inline bool needsYouTubeQuirk(ExecState*, Frame*)
{
return false;
}
#else
static bool needsYouTubeQuirk(ExecState* exec, Frame* frame)
{
JSFunction* function = exec->function();
if (!function)
return false;
DEFINE_STATIC_LOCAL(const Identifier, isWindowsFunctionName, (exec, "isWindows"));
if (function->functionName() != isWindowsFunctionName)
return false;
ExecState* callingExec = exec->callingExecState();
if (!callingExec)
return false;
JSFunction* callingFunction = callingExec->function();
if (!callingFunction)
return false;
JSObject* thisObject = callingExec->thisValue();
if (!thisObject)
return false;
DEFINE_STATIC_LOCAL(const Identifier, isSafariFunction, (exec, "isSafari"));
JSValuePtr isSafariFunction = thisObject->getDirect(isSafariFunctionName);
if (isSafariFunction != callingFunction)
return false;
Document* document = frame->document();
if (!document)
return false;
const KURL& url = document->url();
if (url.host() != "youtube.com" && url.host() != "www.youtube.com")
return false;
if (url.path() != "/")
return false;
Settings* settings = frame->settings();
if (!settings)
return false;
if (!settings->needsSiteSpecificQuirks())
return false;
return true;
}
#endif
JSValuePtr JSNavigator::appVersion(ExecState* exec) const
{
Navigator* imp = static_cast<Navigator*>(impl());
Frame* frame = imp->frame();
if (!frame)
return jsString(exec, "");
if (needsYouTubeQuirk(exec, frame))
return jsString(exec, "");
return jsString(exec, imp->appVersion());
}
void JSNavigator::mark()
{
Base::mark();
JSGlobalData& globalData = *Heap::heap(this)->globalData();
markDOMObjectWrapper(globalData, impl()->optionalGeolocation());
}
}