void CMSDNForumHelper::RevealHiddenLinks(IHTMLDocument2* pDocument)
{
	CComBSTR url;
	HRESULT hr=pDocument->get_URL(&url);
	if(hr==S_OK)
	{
		url.ToLower();
		CString urlString(url);
		if(urlString.Find(_T("microsoft.com"))==-1)
			return;
		if(urlString.Find(_T("social"))==1)
			return;
		
	}
    CComPtr<IHTMLElementCollection> linkElementCollection;

    // Get the collection of images from the DOM.
	 hr = pDocument->get_links(&linkElementCollection);
    if (hr == S_OK && linkElementCollection != NULL)
    {
        // Get the number of images in the collection.
        long linkCount = 0;
        hr = linkElementCollection->get_length(&linkCount);
        if (hr == S_OK && linkCount > 0)
        {
            for (int i = 0; i < linkCount; i++)
            {
                CComVariant varItemIndex(i);
                CComVariant varEmpty;
                CComPtr<IDispatch> linkDispatch;
                // Get the link out of the collection by index.
                hr = linkElementCollection->item(varItemIndex, varEmpty, &linkDispatch);
                if (hr == S_OK && linkDispatch != NULL)
                {
					//filter out hot spot on images
					CComQIPtr<IHTMLAnchorElement> anchorElement(linkDispatch);
					if(anchorElement==NULL) continue;
                    //query for the generic HTML element interface
					CComQIPtr<IHTMLElement> linkElement(linkDispatch);					
                    if (linkElement)
                    {
                        // ...then ask for the style interface.
                        CComPtr<IHTMLStyle> linkStyle;
						hr = linkElement->get_style(&linkStyle);

                        // Set display="none" to hide the image.
                        if (hr == S_OK && linkStyle != NULL)
                        {                            
							CComVariant linkCollor;
							hr=linkStyle->get_color(&linkCollor);
							if(linkCollor.vt==VT_BSTR)
							{
								CComBSTR linkCollorString(linkCollor.bstrVal);
								if (hr == S_OK && linkCollorString.Length()>0)
								{
									linkStyle->put_backgroundColor(CComVariant(_T("red")));
									linkStyle->put_color(CComVariant(_T("")));
									CComBSTR href,text;
									anchorElement->get_href(&href);
									linkElement->get_innerText(&text);
									CString newText;
									newText.Format(_T("hidden link, possible spam: text: %s, url: %s"),text,href);
									linkElement->put_innerText(CComBSTR(newText));
								}
							}
                        }
                    }
                }
            }
        }
    }
}
Ejemplo n.º 2
0
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;
}