NS_IMETHODIMP EmbedWindow::SetDimensions(PRUint32 aFlags, PRInt32 aX, PRInt32 aY, PRInt32 aCX, PRInt32 aCY) { PtMozillaWidget_t *moz = (PtMozillaWidget_t *) mOwner->mOwningWidget; PtCallbackList_t *cb; PtCallbackInfo_t cbinfo; PtMozillaNewAreaCb_t resize; nsresult rv = NS_ERROR_INVALID_ARG; if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION && (aFlags & (nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_INNER | nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER))) { rv = mBaseWindow->SetPositionAndSize(aX, aY, aCX, aCY, PR_TRUE); } else if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION) { rv = mBaseWindow->SetPosition(aX, aY); } else if (aFlags & (nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_INNER | nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER)) { rv = mBaseWindow->SetSize(aCX, aCY, PR_TRUE); } return rv; if (!moz->resize_cb) return NS_OK; cb = moz->resize_cb; memset(&cbinfo, 0, sizeof(cbinfo)); cbinfo.reason = Pt_CB_MOZ_NEW_AREA; cbinfo.cbdata = &resize; memset(&resize, 0, sizeof(PtMozillaNewAreaCb_t)); if( aCX==0 && aCY==0 ) resize.flags = Pt_MOZ_NEW_AREA_SET_POSITION; else resize.flags = Pt_MOZ_NEW_AREA_SET_AREA; resize.area.pos.x = aX; resize.area.pos.y = aY; resize.area.size.w = aCX; resize.area.size.h = aCY; PtInvokeCallbackList(cb, (PtWidget_t *)moz, &cbinfo); return NS_OK; }
NS_INTERFACE_MAP_END // nsIWebBrowserChrome NS_IMETHODIMP EmbedWindow::SetStatus(PRUint32 aStatusType, const PRUnichar *aStatus) { PtMozillaWidget_t *moz = (PtMozillaWidget_t *) mOwner->mOwningWidget; PtCallbackList_t *cb; PtCallbackInfo_t cbinfo; PtMozillaInfoCb_t info; nsAutoString Text ( aStatus ); int type = 0; switch (aStatusType) { case STATUS_SCRIPT: type = Pt_MOZ_INFO_JSSTATUS; break; case STATUS_SCRIPT_DEFAULT: return NS_OK; break; case STATUS_LINK: type = Pt_MOZ_INFO_LINK; break; default: return NS_OK; break; } if (!moz->info_cb) return NS_OK; memset(&cbinfo, 0, sizeof(cbinfo)); cbinfo.cbdata = &info; cbinfo.reason = Pt_CB_MOZ_INFO; cb = moz->info_cb; info.type = type; info.status = 0; const char* status = ToNewCString(Text); info.data = (char *)status; PtInvokeCallbackList(cb, (PtWidget_t *) moz, &cbinfo); nsMemory::Free( (void*)status ); return NS_OK; }
NS_IMETHODIMP EmbedWindow::SetTitle(const PRUnichar *aTitle) { PtMozillaWidget_t *moz = (PtMozillaWidget_t *)mOwner->mOwningWidget; PtCallbackList_t *cb; PtCallbackInfo_t cbinfo; PtMozillaInfoCb_t info; nsString mTitleString(aTitle); const char *str; int to_free = 0; mTitle = aTitle; if (!moz->info_cb) return NS_OK; memset(&cbinfo, 0, sizeof(cbinfo)); cbinfo.cbdata = &info; cbinfo.reason = Pt_CB_MOZ_INFO; cb = moz->info_cb; info.type = Pt_MOZ_INFO_TITLE; info.status = 0; /* see if the title is empty */ if( mTitleString.Length() == 0 ) { if( moz->EmbedRef->mURI.Length() > 0 ) { str = ToNewCString( moz->EmbedRef->mURI ); to_free = 1; } else { str = " "; } } else { NS_ConvertUTF16toUTF8 theUnicodeString( mTitleString ); str = theUnicodeString.get( ); } info.data = (char*) str; PtInvokeCallbackList(cb, (PtWidget_t *) moz, &cbinfo); if( to_free ) nsMemory::Free( (void*)str ); return NS_OK; }
NS_IMETHODIMP EmbedWindow::DestroyBrowserWindow(void) { PtMozillaWidget_t *moz = (PtMozillaWidget_t *) mOwner->mOwningWidget; PtCallbackList_t *cb; PtCallbackInfo_t cbinfo; if (!moz->destroy_cb) return NS_OK; cb = moz->destroy_cb; memset(&cbinfo, 0, sizeof(cbinfo)); cbinfo.reason = Pt_CB_MOZ_DESTROY; PtInvokeCallbackList(cb, (PtWidget_t *)moz, &cbinfo); return NS_OK; }
/* void OnStartLookup (in nsISupports ctxt, in string hostname); */ NS_IMETHODIMP EmbedWindow::OnStartLookup(nsISupports *ctxt, const char *hostname) { PtMozillaWidget_t *moz = (PtMozillaWidget_t *) mOwner->mOwningWidget; PtCallbackList_t *cb = NULL; PtCallbackInfo_t cbinfo; PtMozillaNetStateCb_t state; cbinfo.reason = Pt_CB_MOZ_NET_STATE; cbinfo.cbdata = &state; state.flags = 0; state.status = 0; state.url = (char *)hostname; char *statusMessage = "Resolving host name:"; state.message = statusMessage; if( ( cb = moz->net_state_cb ) ) PtInvokeCallbackList(cb, (PtWidget_t *) moz, &cbinfo); return NS_OK; }
void EmbedDownload::ReportDownload( int type, int current, int total, char *message ) { PtCallbackInfo_t cbinfo; PtWebDownloadCallback_t cb; memset( &cbinfo, 0, sizeof( cbinfo ) ); cbinfo.reason = Pt_CB_MOZ_DOWNLOAD; cbinfo.cbdata = &cb; cb.download_ticket = mDownloadTicket; cb.type = type; cb.url = mURL; cb.current = current; cb.total = total; cb.message = message; if( type == Pt_WEB_DOWNLOAD_DONE || type == Pt_WEB_DOWNLOAD_ERROR) mDone = PR_TRUE; PtInvokeCallbackList( mMozillaWidget->web_download_cb, (PtWidget_t *)mMozillaWidget, &cbinfo ); }
NS_IMETHODIMP EmbedWindow::SizeBrowserTo(PRInt32 aCX, PRInt32 aCY) { PtMozillaWidget_t *moz = (PtMozillaWidget_t *) mOwner->mOwningWidget; PtCallbackList_t *cb; PtCallbackInfo_t cbinfo; PtMozillaNewAreaCb_t resize; if (!moz->resize_cb) return NS_OK; cb = moz->resize_cb; memset(&cbinfo, 0, sizeof(cbinfo)); cbinfo.reason = Pt_CB_MOZ_NEW_AREA; resize.flags = Pt_MOZ_NEW_AREA_SET_SIZE; resize.area.size.w = aCX; resize.area.size.h = aCY; cbinfo.cbdata = &resize; PtInvokeCallbackList(cb, (PtWidget_t *)moz, &cbinfo); return NS_OK; }
NS_IMETHODIMP nsUnknownContentTypeHandler::PromptForSaveToFile( nsIHelperAppLauncher* aLauncher, nsISupports *aWindowContext, const PRUnichar *aDefaultFile, const PRUnichar *aSuggestedFileExtension, PRBool aForcePrompt, nsILocalFile **_retval ) { ///* ATENTIE */ printf("PromptForSaveToFile!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n"); NS_ENSURE_ARG_POINTER(_retval); *_retval = nsnull; /* try to get the PtMozillawidget_t* pointer form the aContext - use the fact the the WebBrowserContainer is registering itself as nsIDocumentLoaderObserver ( SetDocLoaderObserver ) */ nsCOMPtr<nsIDOMWindow> domw( do_GetInterface( aWindowContext ) ); nsIDOMWindow *parent; domw->GetParent( &parent ); PtWidget_t *w = GetWebBrowser( parent ); PtMozillaWidget_t *moz = ( PtMozillaWidget_t * ) w; /* get the suggested filename */ NS_ConvertUTF16toUTF8 theUnicodeString( aDefaultFile ); const char *filename = theUnicodeString.get( ); /* get the url */ nsCOMPtr<nsIURI> aSourceUrl; aLauncher->GetSource( getter_AddRefs(aSourceUrl) ); const char *url; nsCAutoString specString; aSourceUrl->GetSpec(specString); url = specString.get(); /* get the mime type */ nsCOMPtr<nsIMIMEInfo> mimeInfo; aLauncher->GetMIMEInfo( getter_AddRefs(mimeInfo) ); nsCAutoString mimeType; mimeInfo->GetMIMEType( mimeType ); PtCallbackInfo_t cbinfo; PtWebUnknownWithNameCallback_t cb; memset( &cbinfo, 0, sizeof( cbinfo ) ); cbinfo.reason = Pt_CB_MOZ_UNKNOWN; cbinfo.cbdata = &cb; cb.action = Pt_WEB_ACTION_OK; cb.content_type = (char*)mimeType.get(); cb.url = (char *)url; cb.content_length = strlen( cb.url ); cb.suggested_filename = (char*)filename; PtInvokeCallbackList( moz->web_unknown_cb, (PtWidget_t *)moz, &cbinfo ); /* this will modal wait for a Pt_ARG_WEB_UNKNOWN_RESP, in mozserver */ /* we have the result in moz->moz_unknown_ctrl */ if( moz->moz_unknown_ctrl->response != Pt_WEB_RESPONSE_OK ) return NS_ERROR_ABORT; /* the user chosen filename is moz->moz_unknown_ctrl->filename */ nsCOMPtr<nsILocalFile> file(do_CreateInstance("@mozilla.org/file/local;1")); NS_ENSURE_TRUE(file, NS_ERROR_FAILURE); nsCString s ( moz->moz_unknown_ctrl->filename ); file->InitWithNativePath( s ); if( !file ) return NS_ERROR_FAILURE; *_retval = file; NS_ADDREF( *_retval ); /* add this download to our list */ EmbedDownload *download = new EmbedDownload( moz, moz->moz_unknown_ctrl->download_ticket, url ); download->mLauncher = aLauncher; aLauncher->SetWebProgressListener( download ); return NS_OK; }
NS_IMETHODIMP EmbedWindow::OnShowContextMenu(PRUint32 aContextFlags, nsIDOMEvent *aEvent, nsIDOMNode *aNode) { PtMozillaWidget_t *moz = (PtMozillaWidget_t *) mOwner->mOwningWidget; PtCallbackList_t *cb; PtCallbackInfo_t cbinfo; PtMozillaContextCb_t cmenu; if (!moz->context_cb) return NS_OK; cb = moz->context_cb; memset(&cbinfo, 0, sizeof(cbinfo)); cbinfo.reason = Pt_CB_MOZ_CONTEXT; cbinfo.cbdata = &cmenu; memset(&cmenu, 0, sizeof(PtMozillaContextCb_t)); if (aContextFlags & CONTEXT_NONE) cmenu.flags |= Pt_MOZ_CONTEXT_NONE; else if (aContextFlags & CONTEXT_LINK) cmenu.flags |= Pt_MOZ_CONTEXT_LINK; else if (aContextFlags & CONTEXT_IMAGE) cmenu.flags |= Pt_MOZ_CONTEXT_IMAGE; else if (aContextFlags & CONTEXT_DOCUMENT) cmenu.flags |= Pt_MOZ_CONTEXT_DOCUMENT; else if (aContextFlags & CONTEXT_TEXT) cmenu.flags |= Pt_MOZ_CONTEXT_TEXT; else if (aContextFlags & CONTEXT_INPUT) cmenu.flags |= Pt_MOZ_CONTEXT_INPUT; nsCOMPtr<nsIDOMMouseEvent> mouseEvent (do_QueryInterface( aEvent )); if(!mouseEvent) return NS_OK; mouseEvent->GetScreenX( &cmenu.x ); mouseEvent->GetScreenY( &cmenu.y ); PtInvokeCallbackList(cb, (PtWidget_t *)moz, &cbinfo); if( aContextFlags & CONTEXT_IMAGE ) { /* store the url we clicked on */ nsAutoString rightClickUrl; // Get the IMG SRC nsresult rv = NS_OK; nsCOMPtr<nsIDOMHTMLImageElement> imgElement(do_QueryInterface(aNode, &rv)); if(NS_FAILED(rv)) return NS_OK; rv = imgElement->GetSrc(rightClickUrl); if( moz->rightClickUrl_image ) free( moz->rightClickUrl_image ); if(NS_FAILED(rv)) moz->rightClickUrl_image = NULL; else moz->rightClickUrl_image = ToNewCString(rightClickUrl); } if( aContextFlags & CONTEXT_LINK ) { /* CONTEXT_IMAGE|CONTEXT_LINK is set for an <IMG> with an <A> as an ancestor */ if( aContextFlags & CONTEXT_IMAGE ) { nsIDOMNode *parent; aNode->GetParentNode( &parent ); if( parent ) aNode = parent; } /* store the url we clicked on */ nsAutoString rightClickUrl; nsresult rv = NS_OK; nsCOMPtr<nsIDOMHTMLAnchorElement> linkElement(do_QueryInterface(aNode, &rv)); if(NS_FAILED(rv)) return NS_OK; // Note that this string is in UCS2 format rv = linkElement->GetHref( rightClickUrl ); if( moz->rightClickUrl_link ) free( moz->rightClickUrl_link ); if(NS_FAILED(rv)) moz->rightClickUrl_link = NULL; else moz->rightClickUrl_link = ToNewCString(rightClickUrl); } return NS_OK; }