Пример #1
0
/*	Constructs a URL_Struct from the the specified URL to the prefetch_list based
	on the value of the pre subtag. 
*/
PUBLIC void
PRE_AddToList(MWContext* context, char* url, double value) 
{
	/* Construct a new URL_Struct with this url, and Prefetch priority */
	URL_Struct* urls;
	PrefetchURLStruct *pus = XP_NEW(PrefetchURLStruct); 

	if (!pre_enabled || !value || !pus || !pre_OKToPrefetch(url))
		return;

	urls = NET_CreateURLStruct(url, NET_DONT_RELOAD);
	if (!urls)
		return;
	
	urls->priority = Prefetch_priority;
	urls->load_background = TRUE;
					
	if (prefetch_list == NULL)
	{
		prefetch_list = XP_ListNew();
	}
	
	pus->prevalue = value;
	pus->URL_s = urls;

	XP_ListAddObjectToEnd(prefetch_list, pus);
}
Пример #2
0
PUBLIC void
NET_LoadNetHelpTopic(MWContext *pContext, const char *topic)
{
	char		*pNetHelpURLString;
	URL_Struct	*pHelpURL;

	if (topic == NULL) {
		return;
	}
	
	/* Convert the fully-specified topic into a nethelp URL: */
	
	pNetHelpURLString = (char *) XP_ALLOC(strlen(topic) + strlen(NETHELP_URL_PREFIX)+1);
	if (!pNetHelpURLString) {
		return;
	}
	
	XP_STRCPY(pNetHelpURLString, NETHELP_URL_PREFIX);
	XP_STRCPY(&(pNetHelpURLString[strlen(NETHELP_URL_PREFIX)]), topic);
	
	pHelpURL = NET_CreateURLStruct(pNetHelpURLString, NET_NORMAL_RELOAD);

	if (!pHelpURL) {
		return;
	}

	NET_GetURL(pHelpURL, FO_PRESENT, pContext, simple_exit);

	XP_FREEIF(pNetHelpURLString);
		
}
Пример #3
0
void XFE_ComposeAttachFolderView::openAttachment(int pos)
{
    if (pos<0 || pos>=_attachPanel->numItems())
        return;

    // Disable preview of previously attached item. Need to resolve
    // inconsistency when attaching URL pointing to cgi. Preview
    // will reload the URL, and the return data may differ from the
    // data previously loaded by the mail back-end. i.e. it will
    // not be a useful preview.
#if 0
    // ensure clicked item is selected
    if (pos!=_attachPanel->currentSelectionPos() && _attachPanel->items())
        _attachPanel->selectItem(_attachPanel->items()[pos]);

    XFE_AttachPanelItem *item=_attachPanel->currentSelection();
    
    if (!item || !item->data())
        return;
    
    URL_Struct *url = NET_CreateURLStruct (item->data(),NET_DONT_RELOAD);
    if (!MSG_RequiresBrowserWindow(url->address))
        fe_GetURL(_context,url,FALSE);
    else
        fe_MakeWindow(XtParent(CONTEXT_WIDGET (_context)), _context, url, NULL,
                      MWContextBrowser, FALSE);

    fe_UserActivity(_context);
#endif
}
Пример #4
0
int
rdfRetrievalType (RDFFile f)
{
	URL_Struct		*urls;
	char			*url;
	int			type;

	url = f->url;
	if (f->localp)
	{
		urls = NET_CreateURLStruct(url,  NET_CACHE_ONLY_RELOAD);
		if ((urls != NULL) && (NET_IsURLInDiskCache(urls) || NET_IsURLInMemCache(urls)))
		{
			type = NET_DONT_RELOAD;
		}
		else
		{
			type = NET_DONT_RELOAD;
		}
		if (urls != NULL)	NET_FreeURLStruct(urls);
	}
	else
	{
		type = NET_DONT_RELOAD;
	}
	return(type);
}
Пример #5
0
void XFE_ReadAttachPanel::saveCb()
{
    if (!currentSelection() || !currentSelection()->data())
        return;

    URL_Struct *url = NET_CreateURLStruct (currentSelection()->data(),NET_DONT_RELOAD);

    if (url)
        fe_SaveURL(_context,url);
}
Пример #6
0
void
readCSS (StyleSheet ss)
{
  URL_Struct                      *urls;
  urls = NET_CreateURLStruct(ss->address, NET_DONT_RELOAD);
  if (urls == NULL)  {
    ss->xmlFile->numOpenStreams--;
    return;
  }
  urls->fe_data = ss;
  NET_GetURL(urls, FO_CACHE_AND_XMLCSS, ss->xmlFile->mwcontext, xmlcss_GetUrlExitFunc);
}
Пример #7
0
void
readHTML (char* url, XMLHTMLInclusion ss)
{
  URL_Struct                      *urls;
  urls = NET_CreateURLStruct(url, NET_DONT_RELOAD);
  if (urls == NULL)  {
    ss->xml->numOpenStreams--;
    return;
  }
  urls->fe_data = ss;
  NET_GetURL(urls, FO_CACHE_AND_XMLHTML, ss->xml->mwcontext, xmlhtml_GetUrlExitFunc);
}
Пример #8
0
int
rdf_GetURL (MWContext *cx,  int method, Net_GetUrlExitFunc *exit_routine, RDFFile rdfFile)
{
	URL_Struct                      *urls;

	if (cx == NULL)  return 0;
	urls = NET_CreateURLStruct(rdfFile->url, NET_DONT_RELOAD);
	if (urls == NULL) return 0;
        /*	urls->use_local_copy = rdfFile->localp;*/
	urls->fe_data = rdfFile;
	if (method) urls->method = method;  
	NET_GetURL(urls, FO_CACHE_AND_RDF, cx, rdf_GetUrlExitFunc);
	return 1;
}
Пример #9
0
void
xmlhtml_complete  (NET_StreamClass *stream)
{
  XMLHTMLInclusion ss =stream->data_object;
  XMLFile xml = ss->xml;
  xml->numOpenStreams--;
  if (xml->numOpenStreams == 0) { 
  /* direct the stream to the html parser */
    NET_StreamClass *newstream;
    URL_Struct *nurls =   NET_CreateURLStruct(copyString(xml->address), NET_DONT_RELOAD);
    StrAllocCopy(nurls->content_type, TEXT_HTML);
    newstream = NET_StreamBuilder(1,  nurls, (MWContext*) xml->mwcontext);
    xml->stream = newstream;
    convertToHTML(xml);
    newstream->complete(newstream);
    NET_FreeURLStruct(nurls); 
  }     
}
Пример #10
0
void XFE_ReadAttachPanel::openCb()
{
    if (!currentSelection())
        return;

    const char *selData=currentSelection()->data();
    if (!selData || strlen(selData)==0)
        return;

    URL_Struct *url = NET_CreateURLStruct (selData,NET_DONT_RELOAD);
    if (!MSG_RequiresBrowserWindow(url->address))
	fe_GetURL(_context,url,FALSE);
    else
        fe_MakeWindow(XtParent(CONTEXT_WIDGET (_context)), _context, url, NULL,
                      MWContextBrowser, FALSE);

    fe_UserActivity(_context);
}
Пример #11
0
char *XFE_ReadAttachDrag::getTargetData(Atom target)
{
    // WARNING - data *must* be allocated with Xt malloc API, or Xt
    // will spring a leak!

    if (!_dragDataURL || !_dragDataName)
        return NULL;
    
    if (target==_XA_NETSCAPE_URL) {
        // translate drag data to NetscapeURL format
        XFE_URLDesktopType urlData;

        urlData.createItemList(1);
        urlData.url(0,_dragDataURL);
        return (char*) XtNewString(urlData.getString());
    }

    if (target==_XA_FILE_NAME) {
        // save url as appropriately named file in a tmp
        // directory.

        if ((_tmpDirectory=XFE_DesktopType::createTmpDirectory())==NULL)
            return NULL;

        _tmpFileName=new char[strlen(_tmpDirectory)+1+strlen(_dragDataName)+1];
        sprintf(_tmpFileName,"%s/%s",_tmpDirectory,_dragDataName);
        URL_Struct *urlStruct=NET_CreateURLStruct(_dragDataURL,NET_DONT_RELOAD);
        if (urlStruct) {
            lockFrame();
            fe_SaveSynchronousURL(_attachPanel->context(),urlStruct,_tmpFileName);
            unlockFrame();
        }

        // return file name        
        return (char*) XtNewString(_tmpFileName);
    }

    if (target==XA_STRING) {
        // return the URL
        return (char*) XtNewString(_dragDataURL);
    }

    return NULL;
}
Пример #12
0
//  Return TRUE in most cases unless serious error.
//  Nothing to draw is OK, but unable to draw is not OK.
BOOL CNetscapeSrvrItem::OnDraw(CDC* pDC, CSize& rSize)
{
	TRACE("CNetscapeSrvrItem::OnDraw %p\n", this);
	ASSERT_VALID(pDC);

	CGenericDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	//	Determine the URL we're going to draw.
	CString csDraw;
	pDoc->GetContextHistoryAddress(csDraw);
	if(csDraw.IsEmpty())	{
		TRACE("Nothing to draw.\n");
		return(TRUE);
	}

	//	Allocate the url.
	URL_Struct *pUrl = NET_CreateURLStruct((const char *)csDraw, NET_DONT_RELOAD);
	if(pUrl == NULL)	{
		TRACE("Nothing to draw without URL.\n");
		return(TRUE);
	}

	//	Before we do this, make sure we know the current size of the view
    //      not the document constant extent.
	CSize csViewport = pDoc->m_csViewExtent;

	//	Have a new context draw the item into the metafile.
	//	We have to block until completion.
	DWORD dwBlockID = CMetaFileCX::MetaFileAnchorObject(pDC, csViewport, pUrl);
	if(dwBlockID == 0)	{
		//	Counld not create new meta file context.
		return(FALSE);
	}

	//	Block return until the context is destroyed.
	FEU_BlockUntilDestroyed(dwBlockID);

	return(TRUE);
}
Пример #13
0
/* load the HTML help mapping file and search for
 * the id or text to load a specific document
 */
PUBLIC void
NET_GetHTMLHelpFileFromMapFile(MWContext *context,
							   char *map_file_url,
							   char *id,
							   char *search_text)
{
	URL_Struct *URL_s;

	XP_ASSERT(map_file_url && id);

	if(!map_file_url || !id)
		return;

	URL_s = NET_CreateURLStruct(map_file_url, NET_DONT_RELOAD);

	if(!URL_s)
		return;

	URL_s->fe_data = XP_STRDUP(id);

	NET_GetURL(URL_s, FO_CACHE_AND_LOAD_HTML_HELP_MAP_FILE, context, simple_exit);
}
Пример #14
0
void
xmlcss_complete  (NET_StreamClass *stream)
{
  StyleSheet ss =stream->data_object;
  URL_Struct *urls = ss->urls;
  XMLFile xml = ss->xmlFile;
  freeMem(ss->holdOver);
  freeMem(ss->line);
  ss->line = ss->holdOver = NULL; 
  xml->numOpenStreams--;
  if (xml->numOpenStreams == 0) { 
  /* direct the stream to the html parser */
    NET_StreamClass *newstream;
    URL_Struct *nurls =   NET_CreateURLStruct(copyString(xml->address), NET_DONT_RELOAD);
    StrAllocCopy(nurls->content_type, TEXT_HTML);
    newstream = NET_StreamBuilder(1,  nurls, (MWContext*) xml->mwcontext);
    xml->stream = newstream;
    convertToHTML(xml);
    newstream->complete(newstream);
    NET_FreeURLStruct(nurls); 
  }     
}
Пример #15
0
  /** go tell the directory that child got added to parent **/
void
ESAddChild (RDF_Resource parent, RDF_Resource child)
{
	URL_Struct		*urls;
	void			*feData, **files_to_post = NULL;

	if ((urls = NET_CreateURLStruct(resourceID(parent), NET_SUPER_RELOAD)) != NULL)
	{
		feData = (void *)esMakeFEData(parent, child, URL_POST_METHOD);
		if ((files_to_post = (char **)XP_ALLOC(2*sizeof(char *))) != NULL)
		{
			files_to_post[0] = nativeFilename(resourceID(child));
			files_to_post[1] = NULL;
		}
		if ((feData != NULL) && (files_to_post != NULL))
		{
			urls->files_to_post = (void *)files_to_post;
			urls->post_to = NULL;
			urls->method = URL_POST_METHOD;
			urls->fe_data = (void *)feData;
			NET_GetURL(urls, FO_PRESENT,
				(MWContext *)gRDFMWContext(),
				es_GetUrlExitFunc);
		}
		else
		{
			if (feData != NULL)
			{
				esFreeFEData(feData);
			}
			if (files_to_post != NULL)
			{
				if (files_to_post[0] != NULL)	freeMem(files_to_post[0]);
				XP_FREE(files_to_post);
			}
			NET_FreeURLStruct(urls);
		}
	}
}
Пример #16
0
void
xml_complete (NET_StreamClass *stream)
{
  NET_StreamClass *newstream;
  void *obj=stream->data_object;
  URL_Struct *urls = ((XMLFile)obj)->urls;
  freeMem(((XMLFile)obj)->holdOver);
  freeMem(((XMLFile)obj)->line);
  ((XMLFile)obj)->line = ((XMLFile)obj)->holdOver = NULL; 
  ((XMLFile)obj)->numOpenStreams--;
  if (((XMLFile)obj)->numOpenStreams < 1) {
  /* direct the stream to the html parser */
    URL_Struct *nurls =   NET_CreateURLStruct(copyString(urls->address), NET_DONT_RELOAD);
    StrAllocCopy(nurls->content_type, TEXT_HTML);

    newstream = NET_StreamBuilder(1,  nurls, (MWContext*) ((XMLFile)obj)->mwcontext);
    ((XMLFile)obj)->stream = newstream;
    convertToHTML(((XMLFile)obj));
    newstream->complete(newstream);
    NET_FreeURLStruct(nurls); 
  }
}
Пример #17
0
  /** remove the child from the directory **/
void
ESRemoveChild (RDF_Resource parent, RDF_Resource child)
{
	URL_Struct		*urls;
	void			*feData;

	if ((urls = NET_CreateURLStruct(resourceID(child), NET_SUPER_RELOAD)) != NULL)
	{
		feData = (void *)esMakeFEData(parent, child, URL_DELETE_METHOD);
		if (feData != NULL)
		{
			urls->method = URL_DELETE_METHOD;
			urls->fe_data = (void *)feData;
			NET_GetURL(urls, FO_PRESENT,
				(MWContext *)gRDFMWContext(),
				es_GetUrlExitFunc);
		}
		else
		{
			NET_FreeURLStruct(urls);
		}
	}
}
Пример #18
0
static JSBool
url_load(JSContext *cx, JSObject *obj, const char *url_string, 
         NET_ReloadMethod reload_how)
{
    JSURL *url;
    URL_Struct *url_struct;
    const char *referer;

    url = JS_GetPrivate(cx, obj);
    if (!url)
	return JS_TRUE;
    url_struct = NET_CreateURLStruct(url_string, reload_how);
    if (!url_struct) {
	JS_ReportOutOfMemory(cx);
	return JS_FALSE;
    }
    if (!(referer = lm_GetSubjectOriginURL(cx)) ||
	!(url_struct->referer = JS_strdup(cx, referer))) {
	NET_FreeURLStruct(url_struct);
	return JS_FALSE;
    }
    return lm_GetURL(cx, url->url_decoder, url_struct);
}
Пример #19
0
CRAWL_PageInfo crawl_makePage(char *siteURL, char *pageURL, ExtCacheDBInfo *cache) {
	CRAWL_PageInfo pageInfo = PR_NEWZAP(CRAWL_PageInfoStruct);
	if (pageInfo == NULL) return NULL;
	pageInfo->url = pageURL;
	pageInfo->siteURL = siteURL;
	pageInfo->url = NET_MakeAbsoluteURL(siteURL, pageURL); /* complete a partial url if necessary */
	if (pageInfo->url != NULL) {
		pageInfo->url_s = NET_CreateURLStruct(pageInfo->url, NET_NORMAL_RELOAD); /* freed in the exit function */
		if (pageInfo->url_s != NULL) {
			pageInfo->url_s->load_background = PR_TRUE;
			pageInfo->url_s->SARCache = cache;
			pageInfo->url_s->owner_data = pageInfo; /* so we can recover the CRAWL_PageInfo in the converter */
		} else {
			PR_Free(pageInfo->url);
			PR_Free(pageInfo);
			return NULL;
		}
	} else {
		PR_Free(pageInfo);
		return NULL;
	}
	return pageInfo;
}
Пример #20
0
void 
GetPopToRDF (RDFT rdf)
{
  MF folder = (MF) rdf->pdata;
  if (endsWith("/inbox", rdf->url)) {
    char* popurl = getMem(100);
    int n = 10;
    int l = strlen(rdf->url);
    URL_Struct *urls ;
    memcpy(popurl, "pop3://", 7);
    while (n < l) {
      if (rdf->url[n] == '/') break;
      popurl[n-3] = rdf->url[n];
      n++;
    }
    
    urls = NET_CreateURLStruct(popurl, NET_DONT_RELOAD);
    if (urls != NULL)  {
      urls->fe_data = rdf;

      NET_GetURL(urls, FO_PRESENT, gRDFMWContext(rdf), Pop_GetUrlExitFunc);
    }
  }
}
Пример #21
0
//-----------------------------------------------------------------------------
// NetStream
//-----------------------------------------------------------------------------
CStreamOutNet::CStreamOutNet( MWContext* pContext )
{
    URL_Struct * URL_s;
    Chrome chrome;

    XP_BZERO( &chrome, sizeof( Chrome ) );
    chrome.allow_close = TRUE;
    chrome.allow_resize = TRUE;
    chrome.show_scrollbar = TRUE;
#ifndef XP_WIN
	// NOTE:  need to verify this change on XP_WIN and remove the
	//        ifndef... [ works on XP_UNIX & XP_MAC ]
	//
	chrome.type = MWContextDialog;
#endif

    //
    // LTNOTE: Ownership of the 'chrome' struct isn't documented in the interface.
    //  The windows implementation doesn't appear to keep pointers to the struct.
    //
    MWContext *pNewContext = FE_MakeNewWindow(pContext, NULL, "view-source",
                    &chrome );
    pNewContext->edit_view_source_hack = TRUE;

    URL_s = NET_CreateURLStruct(XP_GetString(EDT_VIEW_SOURCE_WINDOW_TITLE), NET_DONT_RELOAD);  

    URL_s->content_type = XP_STRDUP(TEXT_PLAIN);

    m_pStream = NET_StreamBuilder(FO_PRESENT, URL_s, pNewContext);

    if(!m_pStream){
        XP_ASSERT( FALSE );
        m_status = EOS_FileError;
    } 
    m_status = EOS_NoError;
}
Пример #22
0
int
rdf_GetURL (MWContext *cx, int method, Net_GetUrlExitFunc *exit_routine, RDFFile rdfFile)
{
	MozillaEvent_rdf_GetURL		*event;
	URL_Struct      		*urls = NULL;
        char				*url;

#ifdef DEBUG_gagan
        return 0;
#endif

    if (cx == NULL)  return 0;
        if (rdfFile->refreshingp && rdfFile->updateURL) {
          url = rdfFile->updateURL;
        } else {
          url = rdfFile->url;
        }
        if (strcmp(url, gNavCntrUrl) == 0) {
          urls = NET_CreateURLStruct(url,  NET_CACHE_ONLY_RELOAD);
#ifdef NU_CACHE
          if (!CacheManager_Contains(url)) {
#else
          if (NET_IsURLInDiskCache(urls) || NET_IsURLInMemCache(urls)) {
          } else {
#endif
            NET_FreeURLStruct(urls);
            urls = NULL;
          }
        }
	if (!urls) 
          urls = NET_CreateURLStruct(url, (rdfFile->refreshingp ? 
                                           NET_SUPER_RELOAD : NET_NORMAL_RELOAD));
	if (urls == NULL) return 0;
	urls->fe_data = rdfFile;
	if (method) urls->method = method;

	if (PR_CurrentThread() == mozilla_thread)
	{
		htLoadBegins(urls, url);
		NET_GetURL(urls, FO_CACHE_AND_RDF, cx, rdf_GetUrlExitFunc);
	}
	else
	{
		/* send event to Mozilla thread */
		
		if (mozilla_event_queue == NULL)	return(0);
		event = PR_NEW(MozillaEvent_rdf_GetURL);
		if (event == NULL)	return(0);
		PR_InitEvent(&(event->ce.event), cx,
			(PRHandleEventProc)rdf_HandleEvent_GetURL,
			(PRDestroyEventProc)rdf_DisposeEvent_GetURL);
		event->url = copyString(url);
		event->urls = urls;
		event->method = FO_CACHE_AND_RDF;
		event->cx = cx;
		event->exitFunc = rdf_GetUrlExitFunc;
		PR_PostEvent(mozilla_event_queue, &(event->ce.event));
	}
	return 1;
}
#endif /* MOZILLA_CLIENT */



void
possiblyRereadRDFFiles (void* data)
{
	possiblyRefreshRDFFiles();
/*	timerID = FE_SetTimeout(possiblyRereadRDFFiles, NULL, 1000 * 60 * 10); 
	once every 10 minutes
	diabled for legal reasons.*/
}



void
RDFglueInitialize()
{
#ifdef MOZILLA_CLIENT

	timerID = FE_SetTimeout(possiblyRereadRDFFiles, NULL, 1000 * 60 * 10); /* once every 10 minutes */
	if (gRLForbiddenDomains != NULL)
	{
		freeMem(gRLForbiddenDomains);
		gRLForbiddenDomains = NULL;
	}
	if (PREF_CopyCharPref("browser.relatedLinksDisabledForDomains", &gRLForbiddenDomains) != PREF_OK)
	{
		gRLForbiddenDomains = NULL;
	}

#endif /* MOZILLA_CLIENT */
}
Пример #23
0
void
fe_showNetcaster(Widget toplevel)

/*
 * description:
 *	This function shows the Netcaster window, starting
 *	Netcaster if necessary.  If Netcaster is not installed,
 *  this function does nothing.
 *
 ****************************************/
{
  MWContext * netcasterContext;

  if (!fe_IsNetcasterInstalled())
    return;

  if(!(netcasterContext=FE_IsNetcasterRunning()))
	{ 

	  Chrome      netcasterChrome;
	  URL_Struct* URL_s;
	  const char* netcasterURL = xfe_netcaster_url();

      if (netcasterURL)
		{

		  if (!LM_GetMochaEnabled() || !LJ_GetJavaEnabled())
			{
			  fe_Alert_2(toplevel, XP_GetString(XP_ALERT_NETCASTER_NO_JS));
			  return;
			}

		  memset(&netcasterChrome, 0, sizeof(Chrome));

		  netcasterChrome.w_hint             = 21;
		  netcasterChrome.h_hint             = 59;
		  netcasterChrome.l_hint             = -1000;
		  netcasterChrome.t_hint             = -1000;
		  netcasterChrome.topmost            = TRUE;
		  netcasterChrome.z_lock             = TRUE;
		  netcasterChrome.location_is_chrome = TRUE;
		  netcasterChrome.disable_commands   = TRUE;
		  netcasterChrome.hide_title_bar     = TRUE;
		  netcasterChrome.restricted_target  = TRUE;
      
		  URL_s = NET_CreateURLStruct(netcasterURL, NET_DONT_RELOAD);
      
		  netcasterContext = xfe2_MakeNewWindow(toplevel,NULL,
												URL_s,
												netcasterWindowName,
												MWContextBrowser,
												False,
												&netcasterChrome);
		}
	  else
		{
		  fe_Alert_2(toplevel, XP_GetString(XP_ALERT_CANT_RUN_NETCASTER));
		} 
	}
  else
	{
	  FE_RaiseWindow(netcasterContext);
	}
}
Пример #24
0
PRIVATE void
net_ParseHTMLHelpLoadHelpDoc(HTMLHelpParseObj *obj, MWContext *context)
{
	URL_Struct *URL_s;
	char *frame_address = NULL;
	char *content_address = NULL;
	MWContext *new_context;
	frame_set_struct *fgs;

	if(obj->id_value || obj->default_id_value)
		content_address = NET_MakeAbsoluteURL(obj->url_to_map_file, 
											  obj->id_value ? 
												obj->id_value : 
												obj->default_id_value);

	if(!content_address)
	  {
		FE_Alert(context, XP_GetString(MK_CANT_LOAD_HELP_TOPIC));
		return;
	  }

	fgs = XP_ListPeekTopObject(obj->frame_group_stack);

	if(fgs)
	  {
		if(fgs->address)
		  {
			frame_address = NET_MakeAbsoluteURL(obj->url_to_map_file, 
												fgs->address);
		  }
	  }

	if(frame_address)
		URL_s = NET_CreateURLStruct(frame_address, NET_DONT_RELOAD);
	else
		URL_s = NET_CreateURLStruct(content_address, NET_DONT_RELOAD);

	if(!URL_s)
		goto cleanup;

	URL_s->window_chrome = XP_NEW(Chrome);	

	if(!URL_s->window_chrome)
		goto cleanup;

	XP_MEMSET(URL_s->window_chrome, 0, sizeof(Chrome));

	if(obj->window_name)
		URL_s->window_target = XP_STRDUP(obj->window_name);
	else
		URL_s->window_target = XP_STRDUP(DEFAULT_HELP_WINDOW_NAME);

	net_help_init_chrome(URL_s->window_chrome, 
						 obj->window_width, 
						 obj->window_height);

	/* We want to revert the character set of the help frame from the standard
	   character set, not whatever happened to be the last viewed source */

	StrAllocCopy(URL_s->charset, INTL_ResourceCharSet());
	
	new_context = XP_FindNamedContextInList(NULL, URL_s->window_target);

	if(frame_address)
	  {
		URL_Struct *content_URL_s;

		/* if there is a frame_address then we load the
		 * frame first and then load the contents
		 * in the frame exit function.
		 */
		content_URL_s = NET_CreateURLStruct(content_address, NET_DONT_RELOAD);

		if(obj->content_target)
			content_URL_s->window_target = XP_STRDUP(obj->content_target);
		else if(fgs->target)
			content_URL_s->window_target = XP_STRDUP(fgs->target);

		/* doesn't work: URL_s->fe_data = (void *) content_URL_s; */

		/* hack for older versions, see pre_exit_routine_above */
		if (obj->helpVersion < 2) {
			frame_content_for_pre_exit_routine = content_URL_s;
		} else {
			frame_content_for_pre_exit_routine = NULL;
			NET_FreeURLStruct(content_URL_s);
		}

		URL_s->pre_exit_fn = net_HelpPreExitRoutine;
	  }

	if(!new_context)
	  {
	  
		/* this will cause the load too */
		new_context = FE_MakeNewWindow(context, 
						 URL_s, 
						 (obj->window_name) ? obj->window_name :  DEFAULT_HELP_WINDOW_NAME, 
						 URL_s->window_chrome);

		if (HELP_INFO_PTR(*new_context) == NULL) {
			new_context->pHelpInfo = XP_NEW_ZAP(HelpInfoStruct);
		}
		
		if (HELP_INFO_PTR(*new_context)->topicURL != NULL) {
			XP_FREE(HELP_INFO_PTR(*new_context)->topicURL);
			HELP_INFO_PTR(*new_context)->topicURL = NULL;
		}
		
		StrAllocCopy(HELP_INFO_PTR(*new_context)->topicURL, content_address);

	  }
	else
	  {
	
		if (HELP_INFO_PTR(*new_context) == NULL) {
			new_context->pHelpInfo = XP_NEW_ZAP(HelpInfoStruct);
		}
		
		if (HELP_INFO_PTR(*new_context)->topicURL != NULL) {
			XP_FREE(HELP_INFO_PTR(*new_context)->topicURL);
			HELP_INFO_PTR(*new_context)->topicURL = NULL;
		}
		
		StrAllocCopy(HELP_INFO_PTR(*new_context)->topicURL, content_address);

		FE_RaiseWindow(new_context);

		/* Compatibility with earlier versions of NetHelp */
		if (obj->helpVersion < 2) {
			FE_GetURL(new_context, URL_s);
		} else {
			LM_SendOnHelp(new_context);
		}
	  }

cleanup:
	FREEIF(frame_address);
	FREE(content_address);

	return;
}
Пример #25
0
/*
 * Load a document from an external URL.  Assumes that layout is
 *   already blocked
 */
static void
lo_GetScriptFromURL(ScriptData *data, int script_type) 
{
    URL_Struct *url_struct;
    lo_TopState *top_state = data->state->top_state;
    PA_Tag *tag = data->tag;

    url_struct = NET_CreateURLStruct(data->url, top_state->force_reload);
    if (url_struct == NULL) {
        top_state->out_of_memory = TRUE;
	lo_DestroyScriptData(data);
	return;
    }

    url_struct->must_cache = TRUE;
    url_struct->preset_content_type = TRUE;
    if (script_type == SCRIPT_TYPE_CSS) {
        StrAllocCopy(url_struct->content_type, TEXT_CSS);
    } else {
	if (tag->type == P_STYLE || tag->type == P_LINK) {
	    StrAllocCopy(url_struct->content_type, TEXT_JSSS);
	} else {
	    StrAllocCopy(url_struct->content_type, js_content_type);
	}
    }

    XP_ASSERT(top_state->layout_blocking_element);

    if (!url_struct->content_type)
	goto out;

    if (!data->inlineSigned) {
        if (data->archiveSrc) {
            /* ARCHIVE= and SRC= */
            /*
             * Need to set nesting url. Create name of form
             * "archive.jar/src.js" 
             */
             
            char *path = lo_BuildJSArchiveURL(url_struct->address,
                                              data->archiveSrc);    
            if (!path)
                goto out;
            ET_SetNestingUrl(data->context, path);
            /* version taken care of in lo_script_archive_exit_fn */
            XP_FREE(path);
        } else {
            /* SRC= but no ARCHIVE= */
            ET_SetNestingUrl(data->context, url_struct->address);
            ET_SetVersion(data->context, data->version);
        }
    }

    url_struct->fe_data = data;

    if (data->archiveSrc != NULL || data->inlineSigned) {
        NET_GetURL(url_struct, 
                   FO_CACHE_ONLY,
                   data->context,
                   lo_script_archive_exit_fn);
    } else {
        NET_GetURL(url_struct, 
                   FO_CACHE_AND_PRESENT, 
                   data->context,
                   lo_script_src_exit_fn);
    }

    return;
  out:
    top_state->out_of_memory = TRUE;
    NET_FreeURLStruct(url_struct);
    lo_DestroyScriptData(data);
    return;
}
Пример #26
0
void npl_ScriptPlugin(MWContext *context, lo_DocState *state, PA_Tag *tag, size_t line_buf_len, char * mimebuf)
{
	char * suffix				= NULL;
    char * fname				= NULL;
	char * embedtagstr			= NULL;
	char * NET_suffix			= NULL;
	PA_Tag * newTag				= NULL;
	NET_StreamClass* viewstream = NULL;
    URL_Struct* urls			= NULL;
	int streamStatus			= 0;
	int id						= 0;

	if (!context || !state || !tag || (line_buf_len <= 0) || !mimebuf){
		XP_Trace("npl_ScriptPlugin:  Invalid input(s).");
		return; /* no need to goto clean_exit, since havn't alloc'd anything */
	}

	urls = NET_CreateURLStruct("internal_url.", NET_DONT_RELOAD);
			ALLOC_CHECK(urls,id,abnormal_exit);

	/* NETLib gives me a pointer here instead of a copy of the string, so I have to make
	   my own, make checks, etc. 
	 */
	NET_suffix = NET_cinfo_find_ext(mimebuf);
	if (!NET_suffix)
		goto abnormal_exit;

	suffix = PR_smprintf("internal_url.%s", NET_suffix);
			ALLOC_CHECK(suffix,id,abnormal_exit);

			XP_FREEIF(urls->address);
	StrAllocCopy(urls->address     , suffix);
			ALLOC_CHECK(urls->address,id,abnormal_exit);

			XP_FREEIF(urls->content_name);
	StrAllocCopy(urls->content_name, suffix);
			ALLOC_CHECK(urls->content_name,id,abnormal_exit);

			XP_FREEIF(urls->content_type);
	StrAllocCopy(urls->content_type, mimebuf);
			ALLOC_CHECK(urls->content_type,id,abnormal_exit);

	urls->must_cache = 1;  	/* ugly flag for mailto and saveas */

	viewstream = NET_StreamBuilder(FO_CACHE_ONLY, urls, context);
			ALLOC_CHECK(viewstream,id,abnormal_exit);

	streamStatus =
		(*viewstream->put_block)(viewstream,(CONST char*)state->line_buf, line_buf_len);
	if (streamStatus <= 0)
		goto abnormal_exit;
	(*viewstream->complete)(viewstream);

	/* Now build internal embed tag pointing to this source:  */
    fname = WH_FileName(urls->cache_file, xpCache);
			ALLOC_CHECK(fname,id,abnormal_exit);
	embedtagstr = PR_smprintf("<EMBED SRC=file:///%s HIDDEN=TRUE>", fname);
			ALLOC_CHECK(embedtagstr,id,abnormal_exit);

	newTag = LO_CreateHiddenEmbedTag(tag,embedtagstr);
			ALLOC_CHECK(newTag,id,abnormal_exit);

	lo_FormatEmbed(context,state,newTag);	 
	goto normal_exit;

abnormal_exit:
	XP_Trace("npl_ScriptPlugin:  Abnormal termination, id = %d",id);
	if (urls) {
		XP_FREEIF(urls->content_type);
		XP_FREEIF(urls->content_name);
		XP_FREEIF(urls->address);
		XP_FREE(  urls);
	}

normal_exit:
	XP_FREEIF(newTag);
	XP_FREEIF(embedtagstr);
	XP_FREEIF(fname);
	XP_FREEIF(viewstream);
	XP_FREEIF(suffix);
	return;

}