root/trunk/llmozlib2/llmozlib2.cpp

Revision 15, 18.2 kB (checked in by callum.linden, 1 year ago)

Updates before new site released. Minor changes to LLMozLib and some new bookmarks for uBrowser.
Reviewed by cricket ball

  • Property svn:eol-style set to native
Line 
1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Mozilla Public License Version
5  * 1.1 (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS" basis,
10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11  * for the specific language governing rights and limitations under the
12  * License.
13  *
14  * The Original Code is Linden Lab Inc. (http://lindenlab.com) code.
15  *
16  * The Initial Developer of the Original Code is:
17  *   Callum Prentice (callum@ubrowser.com)
18  *
19  * Portions created by the Initial Developer are Copyright (C) 2006
20  * the Initial Developer. All Rights Reserved.
21  *
22  * Contributor(s):
23  *  Callum Prentice (callum@ubrowser.com)
24  *
25  * Alternatively, the contents of this file may be used under the terms of
26  * either the GNU General Public License Version 2 or later (the "GPL"), or
27  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28  * in which case the provisions of the GPL or the LGPL are applicable instead
29  * of those above. If you wish to allow use of your version of this file only
30  * under the terms of either the GPL or the LGPL, and not to allow others to
31  * use your version of this file under the terms of the MPL, indicate your
32  * decision by deleting the provisions above and replace them with the notice
33  * and other provisions required by the GPL or the LGPL. If you do not delete
34  * the provisions above, a recipient may use your version of this file under
35  * the terms of any one of the MPL, the GPL or the LGPL.
36  *
37  * ***** END LICENSE BLOCK ***** */
38
39 #include <sstream>
40 #include <iostream>
41 #include <iomanip>
42 #include <time.h>
43
44 #include "llmozlib2.h"
45
46 #include "llembeddedbrowser.h"
47 #include "llembeddedbrowserwindow.h"
48
49 LLMozLib* LLMozLib::sInstance = 0;
50
51 ////////////////////////////////////////////////////////////////////////////////
52 //
53 LLMozLib::LLMozLib() :
54         mMaxBrowserWindows( 16 )
55 {
56 }
57
58 ////////////////////////////////////////////////////////////////////////////////
59 //
60 LLMozLib* LLMozLib::getInstance()
61 {
62         if ( ! sInstance )
63         {
64                 sInstance = new LLMozLib;
65         };
66
67         return sInstance;
68 }
69
70 ////////////////////////////////////////////////////////////////////////////////
71 //
72 LLMozLib::~LLMozLib()
73 {
74 }
75
76 ////////////////////////////////////////////////////////////////////////////////
77 //
78 bool LLMozLib::init( std::string applicationDir, std::string componentDir, std::string profileDir, void* nativeWindowHandleIn )
79 {
80         return LLEmbeddedBrowser::getInstance()->init( applicationDir,
81                                                                                                                 componentDir,
82                                                                                                                         profileDir,
83                                                                                                                                 nativeWindowHandleIn );
84 }
85
86 ////////////////////////////////////////////////////////////////////////////////
87 //
88 int LLMozLib::getLastError()
89 {
90         return LLEmbeddedBrowser::getInstance()->getLastError();
91 }
92
93 ////////////////////////////////////////////////////////////////////////////////
94 //
95 bool LLMozLib::reset()
96 {
97         return LLEmbeddedBrowser::getInstance()->reset();
98 }
99
100 ////////////////////////////////////////////////////////////////////////////////
101 //
102 bool LLMozLib::clearCache()
103 {
104         return LLEmbeddedBrowser::getInstance()->clearCache();
105 }
106
107 ////////////////////////////////////////////////////////////////////////////////
108 //
109 const std::string LLMozLib::getVersion()
110 {
111         const int majorVersion = 2;
112         const int minorVersion = 1;
113
114         // number of hours since "time began" for this library - used to identify builds of same version
115         const int magicNumber = static_cast< int >( ( time( NULL ) / 3600L  ) - ( 321190L ) );
116
117         // return as a string for now - don't think we need to expose actual version numbers
118         std::ostringstream codec;
119         codec << std::setw( 1 ) << std::setfill( '0' );
120         codec << majorVersion << ".";
121         codec << std::setw( 2 ) << std::setfill( '0' );
122         codec << minorVersion << ".";
123         codec << std::setw( 5 ) << std::setfill( '0' );
124         codec << magicNumber;
125         codec << " (Mozilla GRE version ";
126         codec << LLEmbeddedBrowser::getInstance()->getGREVersion();
127         codec << ")";
128
129         return codec.str();
130 }
131
132 ////////////////////////////////////////////////////////////////////////////////
133 //
134 void LLMozLib::setBrowserAgentId( std::string idIn )
135 {
136         LLEmbeddedBrowser::getInstance()->setBrowserAgentId( idIn );
137 }
138
139 ////////////////////////////////////////////////////////////////////////////////
140 //
141 bool LLMozLib::enableProxy( bool proxyEnabledIn, std::string proxyHostNameIn, int proxyPortIn )
142 {
143         return LLEmbeddedBrowser::getInstance()->enableProxy( proxyEnabledIn, proxyHostNameIn, proxyPortIn );
144 }
145
146 ////////////////////////////////////////////////////////////////////////////////
147 //
148 int LLMozLib::createBrowserWindow( int browserWindowWidthIn, int browserWindowHeightIn )
149 {
150         LLEmbeddedBrowserWindow* browserWindow = LLEmbeddedBrowser::getInstance()->createBrowserWindow( browserWindowWidthIn, browserWindowHeightIn );
151
152         if ( browserWindow )
153         {
154                 // arbitrary limit so we don't exhaust system resources
155                 int id( 0 );
156                 while ( ++id < mMaxBrowserWindows )
157                 {
158                         std::pair< BrowserWindowMapIter, bool > result = mBrowserWindowMap.insert( std::make_pair( id, browserWindow ) );
159
160                         // find first place the insert succeeds and use that index as the id
161                         if ( result.second )
162                         {
163                                 browserWindow->setWindowId( id );
164
165                                 return id;
166                         };
167                 };
168         };
169
170         return 0;
171 }
172
173 ////////////////////////////////////////////////////////////////////////////////
174 //
175 bool LLMozLib::destroyBrowserWindow( int browserWindowIdIn )
176 {
177         // don't use the utility method here since we need the iterator to remove the entry from the map
178         BrowserWindowMapIter iter = mBrowserWindowMap.find( browserWindowIdIn );
179         LLEmbeddedBrowserWindow* browserWindow = (*iter).second;
180
181         if ( browserWindow )
182         {
183                 LLEmbeddedBrowser::getInstance()->destroyBrowserWindow( browserWindow );
184         };
185
186         mBrowserWindowMap.erase( iter );
187
188         return true;
189 }
190
191 ////////////////////////////////////////////////////////////////////////////////
192 //
193 bool LLMozLib::setBackgroundColor( int browserWindowIdIn, const int redIn, const int greenIn, const int blueIn )
194 {
195         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
196         if ( browserWindow )
197         {
198                 browserWindow->setBackgroundColor( redIn, greenIn, blueIn );
199
200                 return true;
201         };
202
203         return false;
204 }
205
206 ////////////////////////////////////////////////////////////////////////////////
207 //
208 bool LLMozLib::setCaretColor( int browserWindowIdIn, const int redIn, const int greenIn, const int blueIn )
209 {
210         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
211         if ( browserWindow )
212         {
213                 browserWindow->setCaretColor( redIn, greenIn, blueIn );
214
215                 return true;
216         };
217
218         return false;
219 }
220
221 ////////////////////////////////////////////////////////////////////////////////
222 //
223 bool LLMozLib::setEnabled( int browserWindowIdIn, bool enabledIn )
224 {
225         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
226         if ( browserWindow )
227         {
228                 browserWindow->setEnabled( enabledIn );
229
230                 return true;
231         };
232
233         return false;
234 }
235
236 ////////////////////////////////////////////////////////////////////////////////
237 //
238 bool LLMozLib::setSize( int browserWindowIdIn, int widthIn, int heightIn )
239 {
240         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
241         if ( browserWindow )
242         {
243                 browserWindow->setSize( widthIn, heightIn );
244
245                 return true;
246         };
247
248         return false;
249 }
250
251 ////////////////////////////////////////////////////////////////////////////////
252 //
253 bool LLMozLib::scrollByLines( int browserWindowIdIn, int linesIn )
254 {
255         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
256         if ( browserWindow )
257         {
258                 browserWindow->scrollByLines( linesIn );
259
260                 return true;
261         };
262
263         return false;
264 }
265
266 ////////////////////////////////////////////////////////////////////////////////
267 //
268 bool LLMozLib::addObserver( int browserWindowIdIn, LLEmbeddedBrowserWindowObserver* subjectIn )
269 {
270         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
271         if ( browserWindow )
272         {
273                 browserWindow->addObserver( subjectIn );
274         };
275
276         return true;
277 }
278
279 ////////////////////////////////////////////////////////////////////////////////
280 //
281 bool LLMozLib::remObserver( int browserWindowIdIn, LLEmbeddedBrowserWindowObserver* subjectIn )
282 {
283         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
284         if ( browserWindow )
285         {
286                 browserWindow->remObserver( subjectIn );
287         };
288
289         return true;
290 }
291
292 ////////////////////////////////////////////////////////////////////////////////
293 //
294 bool LLMozLib::navigateTo( int browserWindowIdIn, const std::string uriIn )
295 {
296         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
297         if ( browserWindow )
298         {
299                 return browserWindow->navigateTo( uriIn ) ? true : false;
300         };
301
302         return false;
303 }
304
305 ////////////////////////////////////////////////////////////////////////////////
306 //
307 bool LLMozLib::navigateStop( int browserWindowIdIn )
308 {
309         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
310         if ( browserWindow )
311         {
312                 browserWindow->navigateStop();
313
314                 return true;
315         };
316
317         return false;
318 }
319
320 ////////////////////////////////////////////////////////////////////////////////
321 //
322 bool LLMozLib::canNavigateBack( int browserWindowIdIn )
323 {
324         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
325         if ( browserWindow )
326         {
327                 return browserWindow->canNavigateBack() ? true : false;
328         };
329
330         return false;
331 }
332
333 ////////////////////////////////////////////////////////////////////////////////
334 //
335 bool LLMozLib::navigateBack( int browserWindowIdIn )
336 {
337         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
338         if ( browserWindow )
339         {
340                 browserWindow->navigateBack();
341
342                 return true;
343         };
344
345         return false;
346 }
347
348 ////////////////////////////////////////////////////////////////////////////////
349 //
350 bool LLMozLib::canNavigateForward( int browserWindowIdIn )
351 {
352         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
353         if ( browserWindow )
354         {
355                 return browserWindow->canNavigateForward() ? true : false;
356         };
357
358         return false;
359 }
360
361 ////////////////////////////////////////////////////////////////////////////////
362 //
363 bool LLMozLib::navigateForward( int browserWindowIdIn )
364 {
365         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
366         if ( browserWindow )
367         {
368                 browserWindow->navigateForward();
369
370                 return true;
371         };
372
373         return false;
374 }
375
376 ////////////////////////////////////////////////////////////////////////////////
377 //
378 bool LLMozLib::navigateReload( int browserWindowIdIn )
379 {
380         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
381         if ( browserWindow )
382         {
383                 browserWindow->navigateReload();
384
385                 return true;
386         };
387
388         return false;
389 }
390
391 ///////////////////////////////////////////////////////////////////////////////
392 //
393 const unsigned char* LLMozLib::grabBrowserWindow( int browserWindowIdIn )
394 {
395         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
396         if ( browserWindow )
397         {
398                 return browserWindow->grabWindow( 0, 0, getBrowserWidth( browserWindowIdIn ), getBrowserHeight( browserWindowIdIn ) );
399         };
400
401         return 0;
402 }
403
404 ////////////////////////////////////////////////////////////////////////////////
405 //
406 const unsigned char* LLMozLib::getBrowserWindowPixels( int browserWindowIdIn )
407 {
408         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
409         if ( browserWindow )
410         {
411                 return browserWindow->getPageBuffer();
412         };
413
414         return 0;
415 }
416
417 ////////////////////////////////////////////////////////////////////////////////
418 //
419 const bool LLMozLib::flipWindow( int browserWindowIdIn, bool flipIn )
420 {
421         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
422         if ( browserWindow )
423         {
424                 browserWindow->flipWindow( flipIn );
425
426                 return true;
427         };
428
429         return false;
430 }
431
432 ////////////////////////////////////////////////////////////////////////////////
433 //
434 const int LLMozLib::getBrowserWidth( int browserWindowIdIn )
435 {
436         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
437         if ( browserWindow )
438         {
439                 return browserWindow->getBrowserWidth();
440         };
441
442         return 0;
443 }
444
445 ////////////////////////////////////////////////////////////////////////////////
446 //
447 const int LLMozLib::getBrowserHeight( int browserWindowIdIn )
448 {
449         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
450         if ( browserWindow )
451         {
452                 return browserWindow->getBrowserHeight();
453         };
454
455         return 0;
456 }
457
458 ////////////////////////////////////////////////////////////////////////////////
459 //
460 const int LLMozLib::getBrowserDepth( int browserWindowIdIn )
461 {
462         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
463         if ( browserWindow )
464         {
465                 return browserWindow->getBrowserDepth();
466         };
467
468         return 0;
469 }
470
471 ////////////////////////////////////////////////////////////////////////////////
472 //
473 const int LLMozLib::getBrowserRowSpan( int browserWindowIdIn )
474 {
475         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
476         if ( browserWindow )
477         {
478                 return browserWindow->getBrowserRowSpan();
479         };
480
481         return 0;
482 }
483
484 ////////////////////////////////////////////////////////////////////////////////
485 //
486 bool LLMozLib::mouseDown( int browserWindowIdIn, int xPosIn, int yPosIn )
487 {
488         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
489         if ( browserWindow )
490         {
491                 browserWindow->mouseDown( xPosIn, yPosIn );
492
493                 return true;
494         };
495
496         return false;
497 }
498
499 ////////////////////////////////////////////////////////////////////////////////
500 //
501 bool LLMozLib::mouseUp( int browserWindowIdIn, int xPosIn, int yPosIn )
502 {
503         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
504         if ( browserWindow )
505         {
506                 browserWindow->mouseUp( xPosIn, yPosIn );
507
508                 return true;
509         };
510
511         return false;
512 }
513
514 ////////////////////////////////////////////////////////////////////////////////
515 //
516 bool LLMozLib::mouseMove( int browserWindowIdIn, int xPosIn, int yPosIn )
517 {
518         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
519         if ( browserWindow )
520         {
521                 browserWindow->mouseMove( xPosIn, yPosIn );
522
523                 return true;
524         };
525
526         return false;
527 }
528
529 ////////////////////////////////////////////////////////////////////////////////
530 //
531 bool LLMozLib::mouseLeftDoubleClick( int browserWindowIdIn, int xPosIn, int yPosIn )
532 {
533         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
534         if ( browserWindow )
535         {
536                 browserWindow->mouseLeftDoubleClick( xPosIn, yPosIn );
537
538                 return true;
539         };
540
541         return false;
542 }
543
544 ////////////////////////////////////////////////////////////////////////////////
545 //
546 bool LLMozLib::keyPress( int browserWindowIdIn, int keyCodeIn )
547 {
548         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
549         if ( browserWindow )
550         {
551                 browserWindow->keyPress( keyCodeIn );
552
553                 return true;
554         };
555
556         return false;
557 }
558
559 bool LLMozLib::unicodeInput( int browserWindowIdIn, unsigned long uni_char )
560 {
561         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
562         if ( browserWindow )
563         {
564                 browserWindow->unicodeInput( uni_char );
565
566                 return true;
567         };
568
569         return false;
570 }
571
572 ////////////////////////////////////////////////////////////////////////////////
573 //
574 bool LLMozLib::focusBrowser( int browserWindowIdIn, bool focusBrowserIn )
575 {
576         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
577         if ( browserWindow )
578         {
579                 browserWindow->focusBrowser( focusBrowserIn );
580
581                 return true;
582         };
583
584         return false;
585 }
586
587 ////////////////////////////////////////////////////////////////////////////////
588 //
589 void LLMozLib::setNoFollowScheme( int browserWindowIdIn, std::string schemeIn )
590 {
591         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
592         if ( browserWindow )
593         {
594                 browserWindow->setNoFollowScheme( schemeIn );
595         };
596 }
597
598 ////////////////////////////////////////////////////////////////////////////////
599 //
600 std::string LLMozLib::getNoFollowScheme( int browserWindowIdIn )
601 {
602         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
603         if ( browserWindow )
604         {
605                 return browserWindow->getNoFollowScheme();
606         };
607
608         return ( "" );
609 }
610
611 ////////////////////////////////////////////////////////////////////////////////
612 //
613 bool LLMozLib::enableCookies( bool enabledIn )
614 {
615         return LLEmbeddedBrowser::getInstance()->enableCookies( enabledIn );
616 }
617
618 ////////////////////////////////////////////////////////////////////////////////
619 //
620 bool LLMozLib::clearAllCookies()
621 {
622         return LLEmbeddedBrowser::getInstance()->clearAllCookies();
623 }
624
625 ////////////////////////////////////////////////////////////////////////////////
626 //
627 bool LLMozLib::enablePlugins( bool enabledIn )
628 {
629         return LLEmbeddedBrowser::getInstance()->enablePlugins( enabledIn );
630 }
631
632 ////////////////////////////////////////////////////////////////////////////////
633 //
634 std::string LLMozLib::evaluateJavascript( int browserWindowIdIn, const std::string scriptIn )
635 {
636         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
637         if ( browserWindow )
638         {
639                 return browserWindow->evaluateJavascript( scriptIn );
640         };
641
642         return "";
643 }
644
645 ////////////////////////////////////////////////////////////////////////////////
646 //
647 bool LLMozLib::set404RedirectUrl(  int browser_window_in, std::string redirect_url )
648 {
649         LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId( browser_window_in );
650         if ( browser_window )
651         {
652                 browser_window->set404RedirectUrl( redirect_url );
653
654                 return true;
655         };
656
657         return false;
658 }
659
660 ////////////////////////////////////////////////////////////////////////////////
661 //
662 bool LLMozLib::clr404RedirectUrl( int browser_window_in )
663 {
664         LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId( browser_window_in );
665         if ( browser_window )
666         {
667                 browser_window->clr404RedirectUrl();
668
669                 return true;
670         };
671
672         return false;
673 }
674
675 ////////////////////////////////////////////////////////////////////////////////
676 // utility method to get an LLEmbeddedBrowserWindow* from a window id (int)
677 LLEmbeddedBrowserWindow* LLMozLib::getBrowserWindowFromWindowId( int browserWindowIdIn )
678 {
679         BrowserWindowMapIter iter = mBrowserWindowMap.find( browserWindowIdIn );
680
681         if ( iter != mBrowserWindowMap.end() )
682                 return ( *iter ).second;
683         else
684                 return 0;
685 }
686
Note: See TracBrowser for help on using the browser.