root/trunk/llmozlib2/llmozlib2.cpp

Revision 9, 17.9 kB (checked in by rob.linden, 2 years ago)

Added files missed in first commit

  • 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 const unsigned char* LLMozLib::grabBrowserWindow( int browserWindowIdIn )
379 {
380         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
381         if ( browserWindow )
382         {
383                 return browserWindow->grabWindow( 0, 0, getBrowserWidth( browserWindowIdIn ), getBrowserHeight( browserWindowIdIn ) );
384         };
385
386         return 0;
387 }
388
389 ////////////////////////////////////////////////////////////////////////////////
390 //
391 const unsigned char* LLMozLib::getBrowserWindowPixels( int browserWindowIdIn )
392 {
393         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
394         if ( browserWindow )
395         {
396                 return browserWindow->getPageBuffer();
397         };
398
399         return 0;
400 }
401
402 ////////////////////////////////////////////////////////////////////////////////
403 //
404 const bool LLMozLib::flipWindow( int browserWindowIdIn, bool flipIn )
405 {
406         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
407         if ( browserWindow )
408         {
409                 browserWindow->flipWindow( flipIn );
410
411                 return true;
412         };
413
414         return false;
415 }
416
417 ////////////////////////////////////////////////////////////////////////////////
418 //
419 const int LLMozLib::getBrowserWidth( int browserWindowIdIn )
420 {
421         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
422         if ( browserWindow )
423         {
424                 return browserWindow->getBrowserWidth();
425         };
426
427         return 0;
428 }
429
430 ////////////////////////////////////////////////////////////////////////////////
431 //
432 const int LLMozLib::getBrowserHeight( int browserWindowIdIn )
433 {
434         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
435         if ( browserWindow )
436         {
437                 return browserWindow->getBrowserHeight();
438         };
439
440         return 0;
441 }
442
443 ////////////////////////////////////////////////////////////////////////////////
444 //
445 const int LLMozLib::getBrowserDepth( int browserWindowIdIn )
446 {
447         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
448         if ( browserWindow )
449         {
450                 return browserWindow->getBrowserDepth();
451         };
452
453         return 0;
454 }
455
456 ////////////////////////////////////////////////////////////////////////////////
457 //
458 const int LLMozLib::getBrowserRowSpan( int browserWindowIdIn )
459 {
460         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
461         if ( browserWindow )
462         {
463                 return browserWindow->getBrowserRowSpan();
464         };
465
466         return 0;
467 }
468
469 ////////////////////////////////////////////////////////////////////////////////
470 //
471 bool LLMozLib::mouseDown( int browserWindowIdIn, int xPosIn, int yPosIn )
472 {
473         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
474         if ( browserWindow )
475         {
476                 browserWindow->mouseDown( xPosIn, yPosIn );
477
478                 return true;
479         };
480
481         return false;
482 }
483
484 ////////////////////////////////////////////////////////////////////////////////
485 //
486 bool LLMozLib::mouseUp( int browserWindowIdIn, int xPosIn, int yPosIn )
487 {
488         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
489         if ( browserWindow )
490         {
491                 browserWindow->mouseUp( xPosIn, yPosIn );
492
493                 return true;
494         };
495
496         return false;
497 }
498
499 ////////////////////////////////////////////////////////////////////////////////
500 //
501 bool LLMozLib::mouseMove( int browserWindowIdIn, int xPosIn, int yPosIn )
502 {
503         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
504         if ( browserWindow )
505         {
506                 browserWindow->mouseMove( xPosIn, yPosIn );
507
508                 return true;
509         };
510
511         return false;
512 }
513
514 ////////////////////////////////////////////////////////////////////////////////
515 //
516 bool LLMozLib::mouseLeftDoubleClick( int browserWindowIdIn, int xPosIn, int yPosIn )
517 {
518         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
519         if ( browserWindow )
520         {
521                 browserWindow->mouseLeftDoubleClick( xPosIn, yPosIn );
522
523                 return true;
524         };
525
526         return false;
527 }
528
529 ////////////////////////////////////////////////////////////////////////////////
530 //
531 bool LLMozLib::keyPress( int browserWindowIdIn, int keyCodeIn )
532 {
533         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
534         if ( browserWindow )
535         {
536                 browserWindow->keyPress( keyCodeIn );
537
538                 return true;
539         };
540
541         return false;
542 }
543
544 bool LLMozLib::unicodeInput( int browserWindowIdIn, unsigned long uni_char )
545 {
546         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
547         if ( browserWindow )
548         {
549                 browserWindow->unicodeInput( uni_char );
550
551                 return true;
552         };
553
554         return false;
555 }
556
557 ////////////////////////////////////////////////////////////////////////////////
558 //
559 bool LLMozLib::focusBrowser( int browserWindowIdIn, bool focusBrowserIn )
560 {
561         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
562         if ( browserWindow )
563         {
564                 browserWindow->focusBrowser( focusBrowserIn );
565
566                 return true;
567         };
568
569         return false;
570 }
571
572 ////////////////////////////////////////////////////////////////////////////////
573 //
574 void LLMozLib::setNoFollowScheme( int browserWindowIdIn, std::string schemeIn )
575 {
576         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
577         if ( browserWindow )
578         {
579                 browserWindow->setNoFollowScheme( schemeIn );
580         };
581 }
582
583 ////////////////////////////////////////////////////////////////////////////////
584 //
585 std::string LLMozLib::getNoFollowScheme( int browserWindowIdIn )
586 {
587         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
588         if ( browserWindow )
589         {
590                 return browserWindow->getNoFollowScheme();
591         };
592
593         return ( "" );
594 }
595
596 ////////////////////////////////////////////////////////////////////////////////
597 //
598 bool LLMozLib::enableCookies( bool enabledIn )
599 {
600         return LLEmbeddedBrowser::getInstance()->enableCookies( enabledIn );
601 }
602
603 ////////////////////////////////////////////////////////////////////////////////
604 //
605 bool LLMozLib::clearAllCookies()
606 {
607         return LLEmbeddedBrowser::getInstance()->clearAllCookies();
608 }
609
610 ////////////////////////////////////////////////////////////////////////////////
611 //
612 bool LLMozLib::enablePlugins( bool enabledIn )
613 {
614         return LLEmbeddedBrowser::getInstance()->enablePlugins( enabledIn );
615 }
616
617 ////////////////////////////////////////////////////////////////////////////////
618 //
619 std::string LLMozLib::evaluateJavascript( int browserWindowIdIn, const std::string scriptIn )
620 {
621         LLEmbeddedBrowserWindow* browserWindow = getBrowserWindowFromWindowId( browserWindowIdIn );
622         if ( browserWindow )
623         {
624                 return browserWindow->evaluateJavascript( scriptIn );
625         };
626
627         return "";
628 }
629
630 ////////////////////////////////////////////////////////////////////////////////
631 //
632 bool LLMozLib::set404RedirectUrl(  int browser_window_in, std::string redirect_url )
633 {
634         LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId( browser_window_in );
635         if ( browser_window )
636         {
637                 browser_window->set404RedirectUrl( redirect_url );
638
639                 return true;
640         };
641
642         return false;
643 }
644
645 ////////////////////////////////////////////////////////////////////////////////
646 //
647 bool LLMozLib::clr404RedirectUrl( int browser_window_in )
648 {
649         LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId( browser_window_in );
650         if ( browser_window )
651         {
652                 browser_window->clr404RedirectUrl();
653
654                 return true;
655         };
656
657         return false;
658 }
659
660 ////////////////////////////////////////////////////////////////////////////////
661 // utility method to get an LLEmbeddedBrowserWindow* from a window id (int)
662 LLEmbeddedBrowserWindow* LLMozLib::getBrowserWindowFromWindowId( int browserWindowIdIn )
663 {
664         BrowserWindowMapIter iter = mBrowserWindowMap.find( browserWindowIdIn );
665
666         if ( iter != mBrowserWindowMap.end() )
667                 return ( *iter ).second;
668         else
669                 return 0;
670 }
671
Note: See TracBrowser for help on using the browser.