diff -r 000000000000 -r 6474c204b198 content/base/src/FeedWriterEnabled.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/base/src/FeedWriterEnabled.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,47 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "js/TypeDecls.h" +#include "nsGlobalWindow.h" +#include "nsIPrincipal.h" +#include "nsIURI.h" +#include "nsString.h" +#include "xpcpublic.h" + +namespace mozilla { + +struct FeedWriterEnabled { + static bool IsEnabled(JSContext* cx, JSObject* aGlobal) + { + // Make sure the global is a window + nsGlobalWindow* win = xpc::WindowGlobalOrNull(aGlobal); + if (!win) { + return false; + } + + // Make sure that the principal is about:feeds. + nsCOMPtr principal = win->GetPrincipal(); + NS_ENSURE_TRUE(principal, false); + nsCOMPtr uri; + principal->GetURI(getter_AddRefs(uri)); + if (!uri) { + return false; + } + + // First check the scheme to avoid getting long specs in the common case. + bool isAbout = false; + uri->SchemeIs("about", &isAbout); + if (!isAbout) { + return false; + } + + // Now check the spec itself + nsAutoCString spec; + uri->GetSpec(spec); + return spec.Equals("about:feeds"); + } +}; + +}