gecko-dev/cmd/winfe/urlecho.cpp

179 строки
5.7 KiB
C++
Executable File

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "stdafx.h"
#include "urlecho.h"
#include "wfedde.h"
extern "C" void FE_URLEcho(URL_Struct *pURL, int iStatus, MWContext *pContext) {
// Purpose: Echo the URL to all appropriately registered applications that are monitoring such URL traffic.
// Arguments: pURL The URL which is being loaded.
// iStatus The status of the load.
// pContext The context in which the load occurred.
// Returns: void
// Comments: Well, sometimes there isn't a window in which the load occurred, what to do then?
// Just don't report.
// Revision History:
// 01-18-95 created GAB
//
// Check to make sure everything's OK to continue onwards.
if(pURL == NULL) {
return;
}
else if(pURL->address == NULL) {
return;
}
else if(pContext == NULL) {
return;
}
else if(GetFrame(pContext) == NULL) {
// Have to have a frame, as the DDE implementation assumes there are windows around.
return;
}
// Let the progress applications know what's up.
if(pURL->server_status / 100 != 2 && pURL->server_status / 100 != 3 && pURL->server_status != 0) {
// The server actually reported an error, be we won't display this as an error but render it in a window.
// We will send these messages to an external type of applciation in this case only though that is monitoring
// progress.
CString myMsg = szLoadString(IDS_SERVER_ERR_NUM);
char aBuffer[16];
sprintf(aBuffer, "%d", pURL->server_status);
myMsg += aBuffer;
return;
}
// Okay, let's start checking stuff out.
// We will NOT report on failures to load.
if(iStatus != MK_DATA_LOADED) {
// This is an error.
// Perhaps just an interrupting load by the user.
// In any event, it will be reported to any monitoring applications in WFE_Alert.
return;
}
// So the data was actually loaded.
// Build a URL, and a Referrer URL.
// Build the mime type, and a windowID.
CString csURL;
CString csReferrer;
CString csMimeType;
DWORD dwWindowID;
csURL = pURL->address;
if(pURL->referer != NULL) {
csReferrer = pURL->referer;
}
if(pURL->content_type != NULL) {
csMimeType = pURL->content_type;
}
dwWindowID = FE_GetContextID(pContext);
CEchoItem::Echo(csURL, csMimeType, dwWindowID, csReferrer);
return;
}
// Static property.
CPtrList CEchoRegistry::m_Registry;
void CEchoItem::Echo(CString& csURL, CString& csMimeType, DWORD dwWindowID, CString& csReferrer) {
// Purpose: Go through every object in the registry, and echo the URL information to them.
// Arguments: csURL The url being loaded.
// csMimeType The mime type of the URL being loaded.
// dwWindowID The window performing the load.
// csReferrer The referring URL.
// Returns: void
// Comments:
// Revision History:
// 01-18-95 created GAB
//
// Go through the registry.
CEchoItem *pItem;
POSITION rIndex = m_Registry.GetHeadPosition();
while(rIndex != NULL) {
pItem = (CEchoItem *)m_Registry.GetNext(rIndex);
// Depending on how the watching server was registered, it is handled through this virtual
// member mapping to the correct class.
pItem->EchoURL(csURL, csMimeType, dwWindowID, csReferrer);
}
}
void CDDEEchoItem::DDERegister(CString &csServiceName) {
// Purpose: Register a DDE applciation to watch url echos.
// Arguments: csServiceName The service name of the DDE server which wants to watch the urls.
// Returns: void
// Comments: Always works.
// Revision History:
// 01-18-95 created GAB
//
// Just create the item. Our job's done.
CDDEEchoItem *pDontCare = new CDDEEchoItem(csServiceName);
}
BOOL CDDEEchoItem::DDEUnRegister(CString &csServiceName) {
// Purpose: Deregister a DDE applciation watching url echos.
// Arguments: csServiceName The DDE service name to unregister.
// Returns: BOOL Wether or not unregistered.
// Comments: Have to look through every entry in the registry, until we find the entry.
// Revision History:
// 01-18-95 created GAB
//
// Go through all registrations.
POSITION rIndex = m_Registry.GetHeadPosition();
CEchoItem *pItem;
CDDEEchoItem *pDelMe;
while(rIndex != NULL) {
pItem = (CEchoItem *)m_Registry.GetNext(rIndex);
// Check the type of the registered app, could be OLE or something.
if(pItem->GetType() == m_DDE) {
pDelMe = (CDDEEchoItem *)pItem;
if(pDelMe->GetServiceName() == csServiceName) {
delete pDelMe;
return(TRUE);
}
}
}
return(FALSE);
}
void CDDEEchoItem::EchoURL(CString& csURL, CString& csMimeType, DWORD dwWindowID, CString& csReferrer) {
// Purpose: Send a registered DDE server an URL echo event.
// Arguments: csURL The url loaded.
// csMimeType The mime type of the loading URL.
// dwWindowID The window performing the load.
// csReferrer The referrer URL.
// Returns: void
// Comments:
// Revision History:
// 01-18-95 created GAB
//
CDDEWrapper::URLEcho(this, csURL, csMimeType, dwWindowID, csReferrer);
}