本文整理汇总了C++中do_GetInterface函数的典型用法代码示例。如果您正苦于以下问题:C++ do_GetInterface函数的具体用法?C++ do_GetInterface怎么用?C++ do_GetInterface使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了do_GetInterface函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: shellAsNav
NS_IMETHODIMP
nsDOMWindowList::NamedItem(const nsAString& aName, nsIDOMWindow** aReturn)
{
nsCOMPtr<nsIDocShellTreeItem> item;
*aReturn = nsnull;
nsCOMPtr<nsIWebNavigation> shellAsNav(do_QueryInterface(mDocShellNode));
if (shellAsNav) {
nsCOMPtr<nsIDOMDocument> domdoc;
shellAsNav->GetDocument(getter_AddRefs(domdoc));
nsCOMPtr<nsIDocument> doc(do_QueryInterface(domdoc));
if (doc) {
doc->FlushPendingNotifications(Flush_ContentAndNotify);
}
}
// The above flush might cause mDocShellNode to be cleared, so we
// need to check that it's still non-null here.
if (mDocShellNode) {
mDocShellNode->FindChildWithName(PromiseFlatString(aName).get(),
false, false, nsnull,
nsnull, getter_AddRefs(item));
nsCOMPtr<nsIScriptGlobalObject> globalObject(do_GetInterface(item));
if (globalObject) {
CallQueryInterface(globalObject.get(), aReturn);
}
}
return NS_OK;
}
开发者ID:Anachid,项目名称:mozilla-central,代码行数:36,代码来源:nsDOMWindowList.cpp
示例2: GetCurrentDoc
/* readonly attribute nsIDOMElement documentFrameElement; */
NS_IMETHODIMP
nsXTFElementWrapper::GetDocumentFrameElement(nsIDOMElement * *aDocumentFrameElement)
{
*aDocumentFrameElement = nsnull;
nsIDocument *doc = GetCurrentDoc();
if (!doc) {
NS_WARNING("no document");
return NS_OK;
}
nsCOMPtr<nsISupports> container = doc->GetContainer();
if (!container) {
NS_ERROR("no docshell");
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsPIDOMWindow> pidomwin = do_GetInterface(container);
if (!pidomwin) {
NS_ERROR("no nsPIDOMWindow interface on docshell");
return NS_ERROR_FAILURE;
}
*aDocumentFrameElement = pidomwin->GetFrameElementInternal();
NS_IF_ADDREF(*aDocumentFrameElement);
return NS_OK;
}
开发者ID:nikhilm,项目名称:v8monkey,代码行数:25,代码来源:nsXTFElementWrapper.cpp
示例3: do_QueryInterface
NS_IMETHODIMP
nsDOMWindowList::Item(PRUint32 aIndex, nsIDOMWindow** aReturn)
{
nsCOMPtr<nsIDocShellTreeItem> item;
*aReturn = nsnull;
nsCOMPtr<nsIWebNavigation> shellAsNav = do_QueryInterface(mDocShellNode);
if (shellAsNav) {
nsCOMPtr<nsIDOMDocument> domdoc;
shellAsNav->GetDocument(getter_AddRefs(domdoc));
nsCOMPtr<nsIDocument> doc = do_QueryInterface(domdoc);
if (doc) {
doc->FlushPendingNotifications(Flush_ContentAndNotify);
}
}
// The above flush might cause mDocShellNode to be cleared, so we
// need to check that it's still non-null here.
if (mDocShellNode) {
mDocShellNode->GetChildAt(aIndex, getter_AddRefs(item));
nsCOMPtr<nsIScriptGlobalObject> globalObject(do_GetInterface(item));
NS_ASSERTION(!item || (item && globalObject),
"Couldn't get to the globalObject");
if (globalObject) {
CallQueryInterface(globalObject, aReturn);
}
}
return NS_OK;
}
开发者ID:Anachid,项目名称:mozilla-central,代码行数:36,代码来源:nsDOMWindowList.cpp
示例4: coords
nsIntPoint
nsCoreUtils::GetScreenCoordsForWindow(nsINode *aNode)
{
nsIntPoint coords(0, 0);
nsCOMPtr<nsIDocShellTreeItem> treeItem(GetDocShellTreeItemFor(aNode));
if (!treeItem)
return coords;
nsCOMPtr<nsIDocShellTreeItem> rootTreeItem;
treeItem->GetRootTreeItem(getter_AddRefs(rootTreeItem));
nsCOMPtr<nsIDOMDocument> domDoc = do_GetInterface(rootTreeItem);
if (!domDoc)
return coords;
nsCOMPtr<nsIDOMWindow> window;
domDoc->GetDefaultView(getter_AddRefs(window));
nsCOMPtr<nsIDOMWindowInternal> windowInter(do_QueryInterface(window));
if (!windowInter)
return coords;
windowInter->GetScreenX(&coords.x);
windowInter->GetScreenY(&coords.y);
return coords;
}
开发者ID:nikhilm,项目名称:v8monkey,代码行数:24,代码来源:nsCoreUtils.cpp
示例5: do_GetService
/*
* Register a new top level window (created elsewhere)
*/
NS_IMETHODIMP
nsAppShellService::RegisterTopLevelWindow(nsIXULWindow* aWindow)
{
// tell the window mediator about the new window
nsCOMPtr<nsIWindowMediator> mediator
( do_GetService(NS_WINDOWMEDIATOR_CONTRACTID) );
NS_ASSERTION(mediator, "Couldn't get window mediator.");
if (mediator)
mediator->RegisterWindow(aWindow);
// tell the window watcher about the new window
nsCOMPtr<nsPIWindowWatcher> wwatcher ( do_GetService(NS_WINDOWWATCHER_CONTRACTID) );
NS_ASSERTION(wwatcher, "No windowwatcher?");
if (wwatcher) {
nsCOMPtr<nsIDocShell> docShell;
aWindow->GetDocShell(getter_AddRefs(docShell));
NS_ASSERTION(docShell, "Window has no docshell");
if (docShell) {
nsCOMPtr<nsIDOMWindow> domWindow(do_GetInterface(docShell));
NS_ASSERTION(domWindow, "Couldn't get DOM window.");
if (domWindow)
wwatcher->AddWindow(domWindow, 0);
}
}
// an ongoing attempt to quit is stopped by a newly opened window
nsCOMPtr<nsIObserverService> obssvc =
do_GetService("@mozilla.org/observer-service;1");
NS_ASSERTION(obssvc, "Couldn't get observer service.");
if (obssvc)
obssvc->NotifyObservers(aWindow, "xul-window-registered", nsnull);
return NS_OK;
}
开发者ID:LittleForker,项目名称:mozilla-central,代码行数:39,代码来源:nsAppShellService.cpp
示例6: persist
int
EmbedWindow::SaveAs(char *fname, char *dirname)
{
nsresult rv;
nsCOMPtr<nsIWebBrowserPersist> persist(do_GetInterface(mWebBrowser, &rv));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsILocalFile> file;
NS_NewNativeLocalFile(nsDependentCString(fname), PR_TRUE, getter_AddRefs(file));
/* the nsIWebBrowserPersist wants a parent directory where to download images and other items related to the document */
/* we have to provide a directory, otherwise the current SaveDocument is marked as not finished and the next one is aborted */
nsCOMPtr<nsILocalFile> parentDirAsLocal;
rv = NS_NewNativeLocalFile(nsDependentCString( dirname ), PR_TRUE, getter_AddRefs(parentDirAsLocal));
if (NS_FAILED(rv)) return rv;
PRUint32 flags;
persist->GetPersistFlags( &flags );
if( !(flags & nsIWebBrowserPersist::PERSIST_FLAGS_REPLACE_EXISTING_FILES ) ) persist->SetPersistFlags( nsIWebBrowserPersist::PERSIST_FLAGS_REPLACE_EXISTING_FILES );
persist->SaveDocument(nsnull, file, parentDirAsLocal, nsnull, 0, 0);
return 0;
}
开发者ID:EdgarChen,项目名称:mozilla-cvs-history,代码行数:24,代码来源:EmbedWindow.cpp
示例7: NS_ASSERTION
nsresult
nsDocShellEditorData::DetachFromWindow()
{
NS_ASSERTION(mEditingSession,
"Can't detach when we don't have a session to detach!");
nsCOMPtr<nsIDOMWindow> domWindow = do_GetInterface(mDocShell);
nsresult rv = mEditingSession->DetachFromWindow(domWindow);
NS_ENSURE_SUCCESS(rv, rv);
mIsDetached = true;
mDetachedMakeEditable = mMakeEditable;
mMakeEditable = false;
nsCOMPtr<nsIDOMDocument> domDoc;
domWindow->GetDocument(getter_AddRefs(domDoc));
nsCOMPtr<nsIHTMLDocument> htmlDoc = do_QueryInterface(domDoc);
if (htmlDoc)
mDetachedEditingState = htmlDoc->GetEditingState();
mDocShell = nullptr;
return NS_OK;
}
开发者ID:Ajunboys,项目名称:mozilla-os2,代码行数:24,代码来源:nsDocShellEditorData.cpp
示例8: do_GetInterface
nsresult
nsPluginStreamListenerPeer::GetInterfaceGlobal(const nsIID& aIID, void** result)
{
if (!mPluginInstance) {
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsIPluginInstanceOwner> owner;
mPluginInstance->GetOwner(getter_AddRefs(owner));
if (owner) {
nsCOMPtr<nsIDocument> doc;
nsresult rv = owner->GetDocument(getter_AddRefs(doc));
if (NS_SUCCEEDED(rv) && doc) {
nsPIDOMWindow *window = doc->GetWindow();
if (window) {
nsCOMPtr<nsIWebNavigation> webNav = do_GetInterface(window);
nsCOMPtr<nsIInterfaceRequestor> ir = do_QueryInterface(webNav);
return ir->GetInterface(aIID, result);
}
}
}
return NS_ERROR_FAILURE;
}
开发者ID:fitzgen,项目名称:v8monkey,代码行数:24,代码来源:nsPluginStreamListenerPeer.cpp
示例9: do_CreateInstance
/* void viewCert (in nsIX509Cert cert); */
NS_IMETHODIMP
nsNSSDialogs::ViewCert(nsIInterfaceRequestor *ctx,
nsIX509Cert *cert)
{
nsresult rv;
nsCOMPtr<nsIPKIParamBlock> block =
do_CreateInstance(NS_PKIPARAMBLOCK_CONTRACTID);
if (!block)
return NS_ERROR_FAILURE;
rv = block->SetISupportAtIndex(1, cert);
if (NS_FAILED(rv))
return rv;
// Get the parent window for the dialog
nsCOMPtr<nsIDOMWindow> parent = do_GetInterface(ctx);
rv = nsNSSDialogHelper::openDialog(parent,
"chrome://pippki/content/certViewer.xul",
block,
false);
return rv;
}
开发者ID:RickEyre,项目名称:mozilla-central,代码行数:25,代码来源:nsNSSDialogs.cpp
示例10: NS_ENSURE_TRUE
nsresult
nsEditingSession::ReattachToWindow(nsIDOMWindow* aWindow)
{
NS_ENSURE_TRUE(mDoneSetup, NS_OK);
NS_ASSERTION(mStateMaintainer, "mStateMaintainer should exist.");
// Imitate nsEditorDocShell::MakeEditable() to reattach the
// old editor ot the window.
nsresult rv;
nsIDocShell *docShell = GetDocShellFromWindow(aWindow);
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
mDocShell = do_GetWeakReference(docShell);
// Disable plugins.
if (!mInteractive)
{
rv = DisableJSAndPlugins(aWindow);
NS_ENSURE_SUCCESS(rv, rv);
}
// Tells embedder that startup is in progress.
mEditorStatus = eEditorCreationInProgress;
// Adds back web progress listener.
rv = PrepareForEditing(aWindow);
NS_ENSURE_SUCCESS(rv, rv);
// Setup the command controllers again.
rv = SetupEditorCommandController("@mozilla.org/editor/editingcontroller;1",
aWindow,
static_cast<nsIEditingSession*>(this),
&mBaseCommandControllerId);
NS_ENSURE_SUCCESS(rv, rv);
rv = SetupEditorCommandController("@mozilla.org/editor/editordocstatecontroller;1",
aWindow,
static_cast<nsIEditingSession*>(this),
&mDocStateControllerId);
NS_ENSURE_SUCCESS(rv, rv);
if (mStateMaintainer)
mStateMaintainer->Init(aWindow);
// Get editor
nsCOMPtr<nsIEditor> editor;
rv = GetEditorForWindow(aWindow, getter_AddRefs(editor));
NS_ENSURE_TRUE(editor, NS_ERROR_FAILURE);
if (!mInteractive)
{
// Disable animation of images in this document:
nsCOMPtr<nsIDOMWindowUtils> utils(do_GetInterface(aWindow));
NS_ENSURE_TRUE(utils, NS_ERROR_FAILURE);
rv = utils->GetImageAnimationMode(&mImageAnimationMode);
NS_ENSURE_SUCCESS(rv, rv);
utils->SetImageAnimationMode(imgIContainer::kDontAnimMode);
}
// The third controller takes an nsIEditor as the context
rv = SetupEditorCommandController("@mozilla.org/editor/htmleditorcontroller;1",
aWindow, editor,
&mHTMLCommandControllerId);
NS_ENSURE_SUCCESS(rv, rv);
// Set context on all controllers to be the editor
rv = SetEditorOnControllers(aWindow, editor);
NS_ENSURE_SUCCESS(rv, rv);
#ifdef DEBUG
{
bool isEditable;
rv = WindowIsEditable(aWindow, &isEditable);
NS_ENSURE_SUCCESS(rv, rv);
NS_ASSERTION(isEditable, "Window is not editable after reattaching editor.");
}
#endif // DEBUG
return NS_OK;
}
开发者ID:FunkyVerb,项目名称:devtools-window,代码行数:82,代码来源:nsEditingSession.cpp
示例11: NS_PRECONDITION
// This is called when the channel is redirected.
NS_IMETHODIMP
FetchDriver::AsyncOnChannelRedirect(nsIChannel* aOldChannel,
nsIChannel* aNewChannel,
uint32_t aFlags,
nsIAsyncVerifyRedirectCallback *aCallback)
{
NS_PRECONDITION(aNewChannel, "Redirect without a channel?");
nsresult rv;
// HTTP Fetch step 5, "redirect status", step 1
if (NS_WARN_IF(mRequest->GetRedirectMode() == RequestRedirect::Error)) {
aOldChannel->Cancel(NS_BINDING_FAILED);
return NS_BINDING_FAILED;
}
// HTTP Fetch step 5, "redirect status", steps 2 through 6 are automatically
// handled by necko before calling AsyncOnChannelRedirect() with the new
// nsIChannel.
// HTTP Fetch step 5, "redirect status", steps 7 and 8 enforcing a redirect
// count are done by Necko. The pref used is "network.http.redirection-limit"
// which is set to 20 by default.
// HTTP Fetch Step 9, "redirect status". We only unset this for spec
// compatibility. Any actions we take on mRequest here do not affect what the
//channel does.
mRequest->UnsetSameOriginDataURL();
// HTTP Fetch step 5, "redirect status", step 10 requires us to halt the
// redirect, but successfully return an opaqueredirect Response to the
// initiating Fetch.
if (mRequest->GetRedirectMode() == RequestRedirect::Manual) {
// Ideally we would simply not cancel the old channel and allow it to
// be processed as normal. Unfortunately this is quite fragile and
// other redirect handlers can easily break it for certain use cases.
//
// For example, nsCORSListenerProxy cancels vetoed redirect channels.
// The HTTP cache will also error on vetoed redirects when the
// redirect has been previously cached.
//
// Therefore simulate the completion of the channel to produce the
// opaqueredirect Response and then cancel the original channel. This
// will result in OnStartRequest() getting called twice, but the second
// time will be with an error response (from the Cancel) which will
// be ignored.
mRequest->SetResponseTainting(InternalRequest::RESPONSETAINT_OPAQUEREDIRECT);
unused << OnStartRequest(aOldChannel, nullptr);
unused << OnStopRequest(aOldChannel, nullptr, NS_OK);
aOldChannel->Cancel(NS_BINDING_FAILED);
return NS_BINDING_FAILED;
}
// The following steps are from HTTP Fetch step 5, "redirect status", step 11
// which requires the RequestRedirect to be "follow".
MOZ_ASSERT(mRequest->GetRedirectMode() == RequestRedirect::Follow);
// HTTP Fetch step 5, "redirect status", steps 11.1 and 11.2 block redirecting
// to a URL with credentials in CORS mode. This is implemented in
// nsCORSListenerProxy.
mRedirectCallback = aCallback;
mOldRedirectChannel = aOldChannel;
mNewRedirectChannel = aNewChannel;
nsCOMPtr<nsIChannelEventSink> outer =
do_GetInterface(mNotificationCallbacks);
if (outer) {
// The callee is supposed to call OnRedirectVerifyCallback() on success,
// and nobody has to call it on failure, so we can just return after this
// block.
rv = outer->AsyncOnChannelRedirect(aOldChannel, aNewChannel, aFlags, this);
if (NS_FAILED(rv)) {
aOldChannel->Cancel(rv);
mRedirectCallback = nullptr;
mOldRedirectChannel = nullptr;
mNewRedirectChannel = nullptr;
}
return rv;
}
(void) OnRedirectVerifyCallback(NS_OK);
return NS_OK;
}
开发者ID:JasonJinCn,项目名称:gecko-dev,代码行数:87,代码来源:FetchDriver.cpp
示例12: NS_ENSURE_ARG_POINTER
/* boolean findNext (); */
NS_IMETHODIMP nsWebBrowserFind::FindNext(bool *outDidFind)
{
NS_ENSURE_ARG_POINTER(outDidFind);
*outDidFind = false;
NS_ENSURE_TRUE(CanFindNext(), NS_ERROR_NOT_INITIALIZED);
nsresult rv = NS_OK;
nsCOMPtr<nsIDOMWindow> searchFrame = do_QueryReferent(mCurrentSearchFrame);
NS_ENSURE_TRUE(searchFrame, NS_ERROR_NOT_INITIALIZED);
nsCOMPtr<nsIDOMWindow> rootFrame = do_QueryReferent(mRootSearchFrame);
NS_ENSURE_TRUE(rootFrame, NS_ERROR_NOT_INITIALIZED);
// first, if there's a "cmd_findagain" observer around, check to see if it
// wants to perform the find again command . If it performs the find again
// it will return true, in which case we exit ::FindNext() early.
// Otherwise, nsWebBrowserFind needs to perform the find again command itself
// this is used by nsTypeAheadFind, which controls find again when it was
// the last executed find in the current window.
nsCOMPtr<nsIObserverService> observerSvc =
mozilla::services::GetObserverService();
if (observerSvc) {
nsCOMPtr<nsISupportsInterfacePointer> windowSupportsData =
do_CreateInstance(NS_SUPPORTS_INTERFACE_POINTER_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsISupports> searchWindowSupports =
do_QueryInterface(rootFrame);
windowSupportsData->SetData(searchWindowSupports);
NS_NAMED_LITERAL_STRING(dnStr, "down");
NS_NAMED_LITERAL_STRING(upStr, "up");
observerSvc->NotifyObservers(windowSupportsData,
"nsWebBrowserFind_FindAgain",
mFindBackwards? upStr.get(): dnStr.get());
windowSupportsData->GetData(getter_AddRefs(searchWindowSupports));
// findnext performed if search window data cleared out
*outDidFind = searchWindowSupports == nullptr;
if (*outDidFind)
return NS_OK;
}
// next, look in the current frame. If found, return.
// Beware! This may flush notifications via synchronous
// ScrollSelectionIntoView.
rv = SearchInFrame(searchFrame, false, outDidFind);
if (NS_FAILED(rv)) return rv;
if (*outDidFind)
return OnFind(searchFrame); // we are done
// if we are not searching other frames, return
if (!mSearchSubFrames && !mSearchParentFrames)
return NS_OK;
nsIDocShell *rootDocShell = GetDocShellFromWindow(rootFrame);
if (!rootDocShell) return NS_ERROR_FAILURE;
int32_t enumDirection;
if (mFindBackwards)
enumDirection = nsIDocShell::ENUMERATE_BACKWARDS;
else
enumDirection = nsIDocShell::ENUMERATE_FORWARDS;
nsCOMPtr<nsISimpleEnumerator> docShellEnumerator;
rv = rootDocShell->GetDocShellEnumerator(nsIDocShellTreeItem::typeAll,
enumDirection, getter_AddRefs(docShellEnumerator));
if (NS_FAILED(rv)) return rv;
// remember where we started
nsCOMPtr<nsIDocShellTreeItem> startingItem =
do_QueryInterface(GetDocShellFromWindow(searchFrame), &rv);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIDocShellTreeItem> curItem;
// XXX We should avoid searching in frameset documents here.
// We also need to honour mSearchSubFrames and mSearchParentFrames.
bool hasMore, doFind = false;
while (NS_SUCCEEDED(docShellEnumerator->HasMoreElements(&hasMore)) && hasMore)
{
nsCOMPtr<nsISupports> curSupports;
rv = docShellEnumerator->GetNext(getter_AddRefs(curSupports));
if (NS_FAILED(rv)) break;
curItem = do_QueryInterface(curSupports, &rv);
if (NS_FAILED(rv)) break;
if (doFind)
{
searchFrame = do_GetInterface(curItem, &rv);
if (NS_FAILED(rv)) break;
OnStartSearchFrame(searchFrame);
// Beware! This may flush notifications via synchronous
// ScrollSelectionIntoView.
rv = SearchInFrame(searchFrame, false, outDidFind);
if (NS_FAILED(rv)) return rv;
if (*outDidFind)
return OnFind(searchFrame); // we are done
//.........这里部分代码省略.........
开发者ID:BitVapor,项目名称:Pale-Moon,代码行数:101,代码来源:nsWebBrowserFind.cpp
示例13: ATLTRACE
//.........这里部分代码省略.........
{
ATLTRACE(_T(", "));
}
}
ATLTRACE(_T(");\n"));
}
#endif
m_spEventSinkTypeInfo->ReleaseFuncDesc(pFuncDesc);
pFuncDesc = NULL;
nsCOMPtr<nsIDOMElement> element;
NPN_GetValue(mPlugin->pPluginInstance, NPNVDOMElement,
static_cast<nsIDOMElement **>(getter_AddRefs(element)));
if (!element)
{
NS_ERROR("can't get the object element");
return S_OK;
}
nsAutoString id;
if (NS_FAILED(element->GetAttribute(NS_LITERAL_STRING("id"), id)) ||
id.IsEmpty())
{
// Object has no name so it can't fire events
return S_OK;
}
nsDependentString eventName(bstrName.m_str);
// Fire the script event handler...
nsCOMPtr<nsIDOMWindow> window;
NPN_GetValue(mPlugin->pPluginInstance, NPNVDOMWindow,
static_cast<nsIDOMWindow **>(getter_AddRefs(window)));
nsCOMPtr<nsIScriptEventManager> eventManager(do_GetInterface(window));
if (!eventManager) return S_OK;
nsCOMPtr<nsISupports> handler;
eventManager->FindEventHandler(id, eventName, pDispParams->cArgs, getter_AddRefs(handler));
if (!handler)
{
return S_OK;
}
// Create a list of arguments to pass along
//
// This array is created on the stack if the number of arguments
// less than kMaxArgsOnStack. Otherwise, the array is heap
// allocated.
//
const int kMaxArgsOnStack = 10;
PRUint32 argc = pDispParams->cArgs;
jsval *args = nsnull;
jsval stackArgs[kMaxArgsOnStack];
// Heap allocate the jsval array if it is too big to fit on
// the stack (ie. more than kMaxArgsOnStack arguments)
if (argc > kMaxArgsOnStack)
{
args = new jsval[argc];
if (!args) return S_OK;
}
else if (argc)
{
// Use the jsval array on the stack...
开发者ID:pauldorn,项目名称:v8monkey,代码行数:67,代码来源:XPConnect.cpp
示例14: NS_ENSURE_ARG_POINTER
// Override a web page
NS_IMETHODIMP
nsParentalControlsServiceWin::RequestURIOverrides(nsIArray *aTargets, nsIInterfaceRequestor *aWindowContext, bool *_retval)
{
*_retval = false;
if (!mEnabled)
return NS_ERROR_NOT_AVAILABLE;
NS_ENSURE_ARG_POINTER(aTargets);
uint32_t arrayLength = 0;
aTargets->GetLength(&arrayLength);
if (!arrayLength)
return NS_ERROR_INVALID_ARG;
if (arrayLength == 1) {
nsCOMPtr<nsIURI> uri = do_QueryElementAt(aTargets, 0);
if (!uri)
return NS_ERROR_INVALID_ARG;
return RequestURIOverride(uri, aWindowContext, _retval);
}
HWND hWnd = nullptr;
// If we have a native window, use its handle instead
nsCOMPtr<nsIWidget> widget(do_GetInterface(aWindowContext));
if (widget)
hWnd = (HWND)widget->GetNativeData(NS_NATIVE_WINDOW);
if (hWnd == nullptr)
hWnd = GetDesktopWindow();
// The first entry should be the root uri
nsAutoCString rootSpec;
nsCOMPtr<nsIURI> rootURI = do_QueryElementAt(aTargets, 0);
if (!rootURI)
return NS_ERROR_INVALID_ARG;
rootURI->GetSpec(rootSpec);
if (rootSpec.IsEmpty())
return NS_ERROR_INVALID_ARG;
// Allocate an array of sub uri
int32_t count = arrayLength - 1;
nsAutoArrayPtr<LPCWSTR> arrUrls(new LPCWSTR[count]);
if (!arrUrls)
return NS_ERROR_OUT_OF_MEMORY;
uint32_t uriIdx = 0, idx;
for (idx = 1; idx < arrayLength; idx++)
{
nsCOMPtr<nsIURI> uri = do_QueryElementAt(aTargets, idx);
if (!uri)
continue;
nsAutoCString subURI;
if (NS_FAILED(uri->GetSpec(subURI)))
continue;
arrUrls[uriIdx] = (LPCWSTR)UTF8ToNewUnicode(subURI); // allocation
if (!arrUrls[uriIdx])
continue;
uriIdx++;
}
if (!uriIdx)
return NS_ERROR_INVALID_ARG;
BOOL ret;
nsRefPtr<IWPCWebSettings> wpcws;
if (SUCCEEDED(mPC->GetWebSettings(NULL, getter_AddRefs(wpcws)))) {
wpcws->RequestURLOverride(hWnd, NS_ConvertUTF8toUTF16(rootSpec).get(),
uriIdx, (LPCWSTR*)arrUrls.get(), &ret);
*_retval = ret;
}
// Free up the allocated strings in our array
for (idx = 0; idx < uriIdx; idx++)
NS_Free((void*)arrUrls[idx]);
return NS_OK;
}
开发者ID:AshishNamdev,项目名称:mozilla-central,代码行数:82,代码来源:nsParentalControlsServiceWin.cpp
示例15: mLoadingPrincipal
LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
nsIPrincipal* aTriggeringPrincipal,
nsINode* aLoadingContext,
nsSecurityFlags aSecurityFlags,
nsContentPolicyType aContentPolicyType)
: mLoadingPrincipal(aLoadingContext ?
aLoadingContext->NodePrincipal() : aLoadingPrincipal)
, mTriggeringPrincipal(aTriggeringPrincipal ?
aTriggeringPrincipal : mLoadingPrincipal.get())
, mLoadingContext(do_GetWeakReference(aLoadingContext))
, mSecurityFlags(aSecurityFlags)
, mInternalContentPolicyType(aContentPolicyType)
, mTainting(LoadTainting::Basic)
, mUpgradeInsecureRequests(false)
, mInnerWindowID(0)
, mOuterWindowID(0)
, mParentOuterWindowID(0)
, mEnforceSecurity(false)
, mInitialSecurityCheckDone(false)
, mIsThirdPartyContext(true)
, mForcePreflight(false)
, mIsPreflight(false)
{
MOZ_ASSERT(mLoadingPrincipal);
MOZ_ASSERT(mTriggeringPrincipal);
// if consumers pass both, aLoadingContext and aLoadingPrincipal
// then the loadingPrincipal must be the same as the node's principal
MOZ_ASSERT(!aLoadingContext || !aLoadingPrincipal ||
aLoadingContext->NodePrincipal() == aLoadingPrincipal);
// if the load is sandboxed, we can not also inherit the principal
if (mSecurityFlags & nsILoadInfo::SEC_SANDBOXED) {
mSecurityFlags ^= nsILoadInfo::SEC_FORCE_INHERIT_PRINCIPAL;
}
if (aLoadingContext) {
nsCOMPtr<nsPIDOMWindow> outerWindow;
// When the element being loaded is a frame, we choose the frame's window
// for the window ID and the frame element's window as the parent
// window. This is the behavior that Chrome exposes to add-ons.
nsCOMPtr<nsIFrameLoaderOwner> frameLoaderOwner = do_QueryInterface(aLoadingContext);
if (frameLoaderOwner) {
nsCOMPtr<nsIFrameLoader> fl = frameLoaderOwner->GetFrameLoader();
nsCOMPtr<nsIDocShell> docShell;
if (fl && NS_SUCCEEDED(fl->GetDocShell(getter_AddRefs(docShell))) && docShell) {
outerWindow = do_GetInterface(docShell);
}
} else {
outerWindow = aLoadingContext->OwnerDoc()->GetWindow();
}
if (outerWindow) {
nsCOMPtr<nsPIDOMWindow> inner = outerWindow->GetCurrentInnerWindow();
mInnerWindowID = inner ? inner->WindowID() : 0;
mOuterWindowID = outerWindow->WindowID();
nsCOMPtr<nsPIDOMWindow> parent = outerWindow->GetScriptableParent();
mParentOuterWindowID = parent->WindowID();
ComputeIsThirdPartyContext(outerWindow);
}
// if the document forces all requests to be upgraded from http to https, then
// we should do that for all requests. If it only forces preloads to be upgraded
// then we should enforce upgrade insecure requests only for preloads.
mUpgradeInsecureRequests =
aLoadingContext->OwnerDoc()->GetUpgradeInsecureRequests(false) ||
(nsContentUtils::IsPreloadType(mInternalContentPolicyType) &&
aLoadingContext->OwnerDoc()->GetUpgradeInsecureRequests(true));
}
const PrincipalOriginAttributes attrs = BasePrincipal::Cast(mLoadingPrincipal)->OriginAttributesRef();
mOriginAttributes.InheritFromDocToNecko(attrs);
}
开发者ID:Eroppo,项目名称:cyberfox-beta,代码行数:76,代码来源:LoadInfo.cpp
示例16: do_GetInterface
JNIEXPORT void JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_CurrentPageImpl_nativeGetSource
(JNIEnv *env, jobject obj, jint nativeBCPtr, jobject selection)
{
NativeBrowserControl* nativeBrowserControl = (NativeBrowserControl *) nativeBCPtr;
nsresult rv = NS_OK;
// get the nsIWebPageDescriptor for the existing window
nsCOMPtr<nsIWebBrowser> oldWebBrowser = nsnull;
rv = nativeBrowserControl->mWindow->GetWebBrowser(getter_AddRefs(oldWebBrowser));
if (NS_FAILED(rv)) {
::util_ThrowExceptionToJava(env, "Exception: Can't get existing webBrowser for view source window");
return;
}
nsCOMPtr<nsIDocShell> oldDocShell = do_GetInterface(oldWebBrowser);
if (!oldDocShell) {
::util_ThrowExceptionToJava(env, "Exception: Can't get existing docShell for view source window");
return;
}
nsCOMPtr<nsIWebPageDescriptor> oldPageDesc = do_GetInterface(oldDocShell);
if (!oldPageDesc) {
::util_ThrowExceptionToJava(env, "Exception: Can't get existing pageDescriptor for view source window");
return;
}
nsCOMPtr<nsISupports> pageCookie = nsnull;
rv = oldPageDesc->GetCurrentDescriptor(getter_AddRefs(pageCookie));
if (NS_FAILED(rv)) {
::util_ThrowExceptionToJava(env, "Exception: GetCurrentDescriptor failed");
return;
}
EmbedWindow *sourceWindow = new EmbedWindow();
sourceWindow->InitNoChrome(nativeBrowserControl);
rv = sourceWindow->CreateWindow_(0,0);
if (NS_FAILED(rv)) {
::util_ThrowExceptionToJava(env, "Exception: Can't create window for view source window");
return;
}
nsCOMPtr<nsIWebBrowser> newWebBrowser = nsnull;
rv = sourceWindow->GetWebBrowser(getter_AddRefs(newWebBrowser));
if (NS_FAILED(rv)) {
::util_ThrowExceptionToJava(env, "Exception: Can't get existing webBrowser for new view source window");
return;
}
// create and install the LoadCompleteProgressListener on the new
// window
LoadCompleteProgressListener *loadCompleteListener =
new LoadCompleteProgressListener();
loadCompleteListener->Init(nativeBrowserControl);
nsCOMPtr<nsISupports> loadCompleteGuard =
static_cast<nsIWebProgressListener *>(loadCompleteListener);
nsCOMPtr<nsISupportsWeakReference> supportsWeak;
supportsWeak = do_QueryInterface(loadCompleteGuard);
nsCOMPtr<nsIWeakReference> weakRef;
supportsWeak->GetWeakReference(getter_AddRefs(weakRef));
rv = newWebBrowser->AddWebBrowserListener(weakRef,
nsIWebProgressListener::GetIID());
if (NS_FAILED(rv)) {
::util_ThrowExceptionToJava(env, "Exception: install progress listener for view source window");
return;
}
nsCOMPtr<nsIDocShell> newDocShell = do_GetInterface(newWebBrowser);
if (!newDocShell) {
::util_ThrowExceptionToJava(env, "Exception: Can't get existing docShell for new view source window");
return;
}
// get the page descriptor from the new window
nsCOMPtr<nsIWebPageDescriptor> newPageDesc = do_GetInterface(newDocShell);
if (!newPageDesc) {
::util_ThrowExceptionToJava(env, "Exception: Can't get pageDescriptor for view source window");
return;
}
rv = newPageDesc->LoadPage(pageCookie,
nsIWebPageDescriptor::DISPLAY_AS_SOURCE);
if (NS_FAILED(rv)) {
::util_ThrowExceptionToJava(env, "Exception: Can't load page for view source window");
return;
}
// allow the page load to complete
PRBool loadComplete = PR_FALSE;
while (!loadComplete) {
nativeBrowserControl->GetWrapperFactory()->ProcessEventLoop();
rv = loadCompleteListener->IsLoadComplete(&loadComplete);
if (NS_FAILED(rv)) {
::util_ThrowExceptionToJava(env, "Exception: Error getting status of load in view source window");
return;
}
}
rv = sourceWindow->SelectAll();
if (NS_FAILED(rv)) {
::util_ThrowExceptionToJava(env, "Exception: Can't select all for view source window");
//.........这里部分代码省略.........
开发者ID:EdgarChen,项目名称:mozilla-cvs-history,代码行数:101,代码来源:CurrentPageImpl.cpp
示例17: setupEditorOnWindow
//.........这里部分代码省略.........
nsIPlaintextEditor::eEditorEnableWrapHackMask;
}
else // Defaulted to html
{
needHTMLController = true;
}
if (mInteractive) {
mEditorFlags |= nsIPlaintextEditor::eEditorAllowInteraction;
}
// make the UI state maintainer
mStateMaintainer = new nsComposerCommandsUpdater();
// now init the state maintainer
// This allows notification of error state
// even if we don't create an editor
rv = mStateMaintainer->Init(aWindow);
NS_ENSURE_SUCCESS(rv, rv);
if (mEditorStatus != eEditorCreationInProgress)
{
mStateMaintainer->NotifyDocumentCreated();
return NS_ERROR_FAILURE;
}
// Create editor and do other things
// only if we haven't found some error above,
nsIDocShell *docShell = GetDocShellFromWindow(aWindow);
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
if (!mInteractive) {
// Disable animation of images in this document:
nsCOMPtr<nsIDOMWindowUtils> utils(do_GetInterface(aWindow));
NS_ENSURE_TRUE(utils, NS_ERROR_FAILURE);
rv = utils->GetImageAnimationMode(&mImageAnimationMode);
NS_ENSURE_SUCCESS(rv, rv);
utils->SetImageAnimationMode(imgIContainer::kDontAnimMode);
}
// create and set editor
nsCOMPtr<nsIEditorDocShell> editorDocShell = do_QueryInterface(docShell, &rv);
NS_ENSURE_SUCCESS(rv, rv);
// Try to reuse an existing editor
nsCOMPtr<nsIEditor> editor = do_QueryReferent(mExistingEditor);
if (editor) {
editor->PreDestroy(false);
} else {
editor = do_CreateInstance(classString, &rv);
NS_ENSURE_SUCCESS(rv, rv);
mExistingEditor = do_GetWeakReference(editor);
}
// set the editor on the docShell. The docShell now owns it.
rv = editorDocShell->SetEditor(editor);
NS_ENSURE_SUCCESS(rv, rv);
// setup the HTML editor command controller
if (needHTMLController)
{
// The third controller takes an nsIEditor as the context
rv = SetupEditorCommandController("@mozilla.org/editor/htmleditorcontroller;1",
aWindow, editor,
&mHTMLCommandControllerId);
NS_ENSURE_SUCCESS(rv, rv);
开发者ID:FunkyVerb,项目名称:devtools-window,代码行数:67,代码来源:nsEditingSession.cpp
示例18: mLoadingPrincipal
LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
nsIPrincipal* aTriggeringPrincipal,
nsINode* aLoadingContext,
nsSecurityFlags aSecurityFlags,
nsContentPolicyType aContentPolicyType)
: mLoadingPrincipal(aLoadingContext ?
aLoadingContext->NodePrincipal() : aLoadingPrincipal)
, mTriggeringPrincipal(aTriggeringPrincipal ?
aTriggeringPrincipal : mLoadingPrincipal.get())
, mLoadingContext(do_GetWeakReference(aLoadingContext))
, mSecurityFlags(aSecurityFlags)
, mInternalContentPolicyType(aContentPolicyType)
, mTainting(LoadTainting::Basic)
, mUpgradeInsecureRequests(false)
, mInnerWindowID(0)
, mOuterWindowID(0)
, mParentOuterWindowID(0)
, mEnforceSecurity(false)
, mInitialSecurityCheckDone(false)
, mIsThirdPartyContext(false)
, mForcePreflight(false)
, mIsPreflight(false)
{
MOZ_ASSERT(mLoadingPrincipal);
MOZ_ASSERT(mTriggeringPrincipal);
// TODO(bug 1259873): Above, we initialize mIsThirdPartyContext to false meaning
// that consumers of LoadInfo that don't pass a context or pass a context from
// which we can't find a window will default to assuming that they're 1st
// party. It would be nice if we could default "safe" and assume that we are
// 3rd party until proven otherwise.
// if consumers pass both, aLoadingContext and aLoadingPrincipal
// then the loadingPrincipal must be the same as the node's principal
MOZ_ASSERT(!aLoadingContext || !aLoadingPrincipal ||
aLoadingContext->NodePrincipal() == aLoadingPrincipal);
// if the load is sandboxed, we can not also inherit the principal
if (mSecurityFlags & nsILoadInfo::SEC_SANDBOXED) {
mSecurityFlags ^= nsILoadInfo::SEC_FORCE_INHERIT_PRINCIPAL;
}
if (aLoadingContext) {
nsCOMPtr<nsPIDOMWindow> contextOuter = aLoadingContext->OwnerDoc()->GetWindow();
if (contextOuter) {
ComputeIsThirdPartyContext(contextOuter);
}
nsCOMPtr<nsPIDOMWindow> outerWindow;
// When the element being loaded is a frame, we choose the frame's window
// for the window ID and the frame element's window as the parent
// window. This is the behavior that Chrome exposes to add-ons.
// NB: If the frameLoaderOwner doesn't have a frame loader, then the load
// must be coming from an object (such as a plugin) that's loaded into it
// instead of a document being loaded. In that case, treat this object like
// any other non-document-loading element.
nsCOMPtr<nsIFrameLoaderOwner> frameLoaderOwner =
do_QueryInterface(aLoadingContext);
nsCOMPtr<nsIFrameLoader> fl = frameLoaderOwner ?
frameLoaderOwner->GetFrameLoader() : nullptr;
if (fl) {
nsCOMPtr<nsIDocShell> docShell;
if (NS_SUCCEEDED(fl->GetDocShell(getter_AddRefs(docShell))) && docShell) {
outerWindow = do_GetInterface(docShell);
}
} else {
outerWindow = contextOuter.forget();
}
if (outerWindow) {
nsCOMPtr<nsPIDOMWindow> inner = outerWindow->GetCurrentInnerWindow();
mInnerWindowID = inner ? inner->WindowID() : 0;
mOuterWindowID = outerWindow->WindowID();
nsCOMPtr<nsPIDOMWindow> parent = outerWindow->GetScriptableParent();
mParentOuterWindowID = parent->WindowID();
}
// if the document forces all requests to be upgraded from http to https, then
// we should do that for all requests. If it only forces preloads to be upgraded
// then we should enforce upgrade insecure requests only for preloads.
mUpgradeInsecureRequests =
aLoadingContext->OwnerDoc()->GetUpgradeInsecureRequests(false) ||
(nsContentUtils::IsPreloadType(mInternalContentPolicyType) &&
aLoadingContext->OwnerDoc()->GetUpgradeInsecureRequests(true));
}
const PrincipalOriginAttributes attrs = BasePrincipal::Cast(mLoadingPrincipal)->OriginAttributesRef();
mOriginAttributes.InheritFromDocToNecko(attrs);
}
开发者ID:stefanie-cliqz,项目名称:browser-f,代码行数:91,代码来源:LoadInfo.cpp
示例19: GetString
// nsIWebProgressListener implementation
NS_IMETHODIMP
nsMsgPrintEngine::OnStateChange(nsIWebProgress* aWebProgress,
nsIRequest *aRequest,
PRUint32 progressStateFlags,
nsresult aStatus)
{
nsresult rv = NS_OK;
// top-level document load data
if (progressStateFlags & nsIWebProgressListener::STATE_IS_DOCUMENT) {
if (progressStateFlags & nsIWebProgressListener::STATE_START) {
// Tell the user we are loading...
nsString msg;
GetString(NS_LITERAL_STRING("LoadingMessageToPrint").get(), msg);
SetStatusMessage(msg);
}
if (progressStateFlags & nsIWebP
|
请发表评论